Как заменить значение столбца, который отсутствует? - PullRequest
0 голосов
/ 27 мая 2019

У меня есть набор данных, первые два значения столбца которого явно отсутствуют, и я не могу его изменить!Вот печать набора данных:

                 data/hora  HumExamRoom                      HumTechRoom Machine  TempExamRoom TempTechRoom
0                                NaN  2017-08-18\t09:22:33\t65.9   74034           NaN          NaN
1                                NaN  2017-10-03\t11:08:26\t60.5   74034           NaN          NaN
2  2018-02-17\t01:45:24          NaN                             69.7   74034           NaN          NaN
3  2018-02-17\t01:45:55          NaN                             67.5   74034           NaN          NaN
4  2018-02-17\t01:46:29          NaN                             65.4   74034           NaN          NaN
5  2018-02-17\t01:47:20          NaN                             63.3   74034           NaN          NaN
6  2018-02-17\t01:48:35          NaN                             61.3   74034           NaN          NaN
7  2018-02-17\t01:49:08          NaN                             63.4   74034           NaN          NaN
8  2018-02-17\t01:49:31          NaN                             65.5   74034           NaN          NaN
9  2018-02-17\t01:49:55          NaN                             67.6   74034           NaN          NaN

Как вы можете видеть, для строк 0 и 1 в столбце 'data / hora' нет значений.Я хочу заменить их информацией в колонке 3. Я перепробовал много вещей, но все они провалились.

Например:

df_74034.replace({df_74034.iloc[0,0] : '2017-08-18\t09:22:33'}, inplace=True)

Тогда я попробовал:

df_74034.at[0, 'data/hora'] = 0

И я получил:

A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  return super(DataFrame, self).rename(**kwargs)
/home/marlon/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py:2584: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self.loc[index, col] = value

Спасибо за любую помощь!

Ответы [ 3 ]

1 голос
/ 28 мая 2019

Ваша проблема - те 2 ячейки, которые содержат пробелы (пустые, табуляции или строки emtpy).Чтобы справиться с ними в целом, просто используйте str.strip перед сравнением с ''.Вы можете назначить напрямую, используя loc и логическую маску равной ''

df_74034.loc[df_74034['data/hora'].str.strip().eq(''), 'data/hora'] = t.HumTechRoom


Out[1891]:
                    data/hora  HumExamRoom                 HumTechRoom  \
0  2017-08-18\t09:22:33\t65.9          NaN  2017-08-18\t09:22:33\t65.9
1  2017-10-03\t11:08:26\t60.5          NaN  2017-10-03\t11:08:26\t60.5
2        2018-02-17\t01:45:24          NaN                        69.7
3        2018-02-17\t01:45:55          NaN                        67.5
4        2018-02-17\t01:46:29          NaN                        65.4
5        2018-02-17\t01:47:20          NaN                        63.3
6        2018-02-17\t01:48:35          NaN                        61.3
7        2018-02-17\t01:49:08          NaN                        63.4
8        2018-02-17\t01:49:31          NaN                        65.5

   Machine  TempExamRoom  TempTechRoom
0    74034           NaN           NaN
1    74034           NaN           NaN
2    74034           NaN           NaN
3    74034           NaN           NaN
4    74034           NaN           NaN
5    74034           NaN           NaN
6    74034           NaN           NaN
7    74034           NaN           NaN
8    74034           NaN           NaN
0 голосов
/ 28 мая 2019

Я решил свою проблему.Вот так:

Мы не можем изменить фрейм данных, потому что это фактически копия фрейма данных.Поэтому методы, которые мы применяли, не работали - чтобы понять, зачем проверять http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html.

Следовательно, мне пришлось напрямую изменить фрейм данных df, из которого пришло df_74034.Там я только что применил:

    df.reset_index(level=0, inplace=True) 
df_74034.rename(index=str, columns={"index": "data/hora"}, inplace=True)

Затем я напечатал df_74034 и получил их индекс, так:

df.loc[69333, 'index'] = '2017-08-18\t09:22:33'
df.loc[69334, 'index'] = '2017-10-03\t11:08:26' 
df.loc[69333, 'HumTechRoom'] = '65.9' 
df.loc[69334, 'HumTechRoom'] = '60.5' 

, который дал мне:

 data/hora  HumExamRoom HumTechRoom Machine  TempExamRoom TempTechRoom
69333  2017-08-18\t09:22:33          NaN        65.9   74034           NaN          NaN
69334  2017-10-03\t11:08:26          NaN        60.5   74034           NaN          NaN
69335  2018-02-17\t01:45:24          NaN        69.7   74034           NaN          NaN
69336  2018-02-17\t01:45:55          NaN        67.5   74034           NaN          NaN
69337  2018-02-17\t01:46:29          NaN        65.4   74034           NaN          NaN
69338  2018-02-17\t01:47:20          NaN        63.3   74034           NaN          NaN
69339  2018-02-17\t01:48:35          NaN        61.3   74034           NaN          NaN
69340  2018-02-17\t01:49:08          NaN        63.4   74034           NaN          NaN
69341  2018-02-17\t01:49:31          NaN        65.5   74034           NaN          NaN
69342  2018-02-17\t01:49:55          NaN        67.6   74034           NaN          NaN

Я знаю, что должен быть более элегантный и умный способ сделать то, что я сделал.Но это сработало для меня.

0 голосов
/ 27 мая 2019

Попробуйте:

missing_hour = df['data/hora'].isna()

df.loc[missing_hour, 'data/hora'] = df.loc[missing_hour,'HumTechRoom']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...