Pandas set_index создает объект NoneType без inplace = True - PullRequest
0 голосов
/ 13 марта 2020

У меня странное поведение с pandas функцией set_index. У меня изначально есть этот фрейм данных:

      Unnamed: 0          Timestamps   PM10
0            NaN                 NaT   PM10
1            NaN                 NaT  ▒g/m▒
2            NaN 2018-12-31 23:00:00  10.76
3            NaN 2018-12-31 22:00:00   9.46
4            NaN 2018-12-31 21:00:00   8.67
...          ...                 ...    ...
8682         NaN 2018-01-01 04:00:00  25.14
8683         NaN 2018-01-01 03:00:00  31.34
8684         NaN 2018-01-01 02:00:00  36.28
8685         NaN 2018-01-01 01:00:00  21.78
8686         NaN 2018-01-01 00:00:00  20.59

Я хочу отбросить первые две строки и установить метки времени как независимые, поэтому я делаю это:

df_final = df.drop([0,1]).set_index('Timestamps', drop=True)

и получаю этот фрейм данных:

                     Unnamed: 0   PM10
Timestamps
2018-12-31 23:00:00         NaN  10.76
2018-12-31 22:00:00         NaN   9.46
2018-12-31 21:00:00         NaN   8.67
2018-12-31 20:00:00         NaN  10.42
2018-12-31 19:00:00         NaN  10.04
...                         ...    ...
2018-01-01 04:00:00         NaN  25.14
2018-01-01 03:00:00         NaN  31.34
2018-01-01 02:00:00         NaN  36.28
2018-01-01 01:00:00         NaN  21.78
2018-01-01 00:00:00         NaN  20.59

Пока все хорошо, но, наконец, я хочу переиндексировать столбец PM10 по новому созданному мной временному индексу t_index, поэтому я делаю это:

data_write = df_final.PM10[-1::-1].reindex(t_index)

Это вот где я получаю сообщение об ошибке:

TypeError: 'NoneType' object is not iterable

После некоторой отладки я пришел к выводу, что set_index вызывает это, но я не могу понять, почему любая помощь приветствуется!

1 Ответ

0 голосов
/ 14 марта 2020

После некоторых проб и ошибок мне удалось сделать эту работу, и вот код, который делает это:

df = df.drop([0,1]).drop("Unnamed: 0", axis=1).set_index('Timestamps', drop=True)
df = df.sort_values(by="Timestamps", ascending=True)

year = 2018
start_index = '{}-01-01 00:00:00'.format(year) # define start of the year
end_index = '{}-12-31 23:00:00'.format(year) # define end of the year
t_index = pd.DatetimeIndex(start=start_index, end=end_index, freq='1h').strftime("%Y-%m-%d %H:%M:%S")

df_final = pd.to_numeric(df.PM10).resample('H').mean().reindex(t_index)

Все еще не уверен, что вызывало ошибку или почему метод .asfreq не помог работа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...