我正在编写一个处理数据框的函数。该数据框中的行由日期时间索引建立索引,并且该数据框中每小时有一行。 基本上,经过一些处理后,这就是我所拥有的:
inquinante temperatura precipitazioni ... umidita day_of_year day_of_week
Data ...
2000-07-04 00:00:00 55.0 23.9 0.0 ... 86.8 186 1
2000-07-04 01:00:00 NaN 23.4 0.0 ... 86.2 186 1
2000-07-04 02:00:00 NaN 22.7 0.0 ... 92.5 186 1
2000-07-04 03:00:00 NaN 22.1 0.0 ... 97.5 186 1
2000-07-04 04:00:00 NaN 22.2 0.0 ... 95.9 186 1
现在,我想过滤出“ inquinante”列的值为NaN的行,因此我编写了以下代码行:
df = df.dropna(subset=["inquinante"])
但是执行后得到的内容如下:
inquinante temperatura precipitazioni ... umidita day_of_year day_of_week
Data ...
2014-01-31 25.0 4.700000 1.000000 ... 95.700000 31 4
2014-02-01 31.0 5.800000 0.000000 ... 94.800000 32 5
2014-02-02 20.0 6.100000 1.800000 ... 97.300000 33 6
2014-02-03 17.0 6.700000 0.600000 ... 96.300000 34 0
2014-02-04 18.0 6.600000 0.800000 ... 97.200000 35 1
为什么现在我的约会比以前多了几天而不是几个小时? 我还尝试将代码行更改为:
df = df[df.inquinante >= 0]
#or
df = df[df.inquinante.notna()]
但是这些似乎都无法解决问题。有什么办法可以解决这个问题,并防止大熊猫对日期进行分组?
预先感谢
答案 0 :(得分:2)
这是当所有索引标签都将午夜或时间00:00:00作为其时间戳时的日期时间索引的自动表示。
df = pd.DataFrame({'value':np.arange(20)}, index=pd.date_range('2020-02-01', periods=20, freq='12H'))
df
输出:
value
2020-02-01 00:00:00 0
2020-02-01 12:00:00 1
2020-02-02 00:00:00 2
2020-02-02 12:00:00 3
2020-02-03 00:00:00 4
2020-02-03 12:00:00 5
2020-02-04 00:00:00 6
2020-02-04 12:00:00 7
2020-02-05 00:00:00 8
2020-02-05 12:00:00 9
2020-02-06 00:00:00 10
2020-02-06 12:00:00 11
2020-02-07 00:00:00 12
2020-02-07 12:00:00 13
2020-02-08 00:00:00 14
2020-02-08 12:00:00 15
2020-02-09 00:00:00 16
2020-02-09 12:00:00 17
2020-02-10 00:00:00 18
2020-02-10 12:00:00 19
现在,让我们将所有时间都放在小时== 12的地方,只留下午夜时间戳记:
df[df.index.hour != 12]
输出:
value
2020-02-01 0
2020-02-02 2
2020-02-03 4
2020-02-04 6
2020-02-05 8
2020-02-06 10
2020-02-07 12
2020-02-08 14
2020-02-09 16
2020-02-10 18
那仍然是一个datetimeindex,每个标签确实有一个时间戳。
df[df.index.hour != 12].index.strftime('%Y-%m-%d %H:%M:%S')
输出:
Index(['2020-02-01 00:00:00', '2020-02-02 00:00:00', '2020-02-03 00:00:00',
'2020-02-04 00:00:00', '2020-02-05 00:00:00', '2020-02-06 00:00:00',
'2020-02-07 00:00:00', '2020-02-08 00:00:00', '2020-02-09 00:00:00',
'2020-02-10 00:00:00'],
dtype='object')
答案 1 :(得分:1)
您可以尝试这样-
temp = df.reset_index()
temp = temp[temp['inquinante'].notna()].set_index('Data')
答案 2 :(得分:1)
如果仅更改日期格式,而不更改值,则始终可以按以下方式将其转换回去:
df['Date'] = df['Date'].dt.strftime('%Y-%m-%d %H:%M:%S')