首页 > 解决方案 > 熊猫数据框日期时间过滤器不起作用

问题描述

我正在学习如何使用 pandas 数据框并尝试预处理一些数据。我有一组数据显示天气,其中 datatime 字段作为字符串。每天在该数据集中出现两次,分别是 00:00 和 12:00。我正在尝试过滤它并仅保留 12:00 小时的数据。我尝试了这里推荐的一些选项:

#pre-processing to get only required information
data = data[["date_time", "WindGustKmph", "humidity", "precipMM", "pressure", "tempC", "winddirDegree", "windspeedKmph"]]
print(data.head())
print(str(len(data)))

#set proper datatime index and keep only day time weather
dataIndex = pd.DatetimeIndex(data['date_time'].astype(str))
data.index = dataIndex
#filter the data
data.between_time('07:00:00', '21:00:00')

print(data.head())
print(str(len(data)))

结果,我看到添加了一个索引,但没有应用过滤器,我的问题是为什么?

          date_time  WindGustKmph  ...  winddirDegree  windspeedKmph
0   2018-01-01 0:00             8  ...             21              4
1  2018-01-01 12:00            12  ...             79             10 
2   2018-01-02 0:00            14  ...             19              7
3  2018-01-02 12:00            18  ...             57             16
4   2018-01-03 0:00            19  ...             16              9

[5 rows x 8 columns]
2192
                            date_time  ...  windspeedKmph
date_time                              ...               
2018-01-01 00:00:00   2018-01-01 0:00  ...              4
2018-01-01 12:00:00  2018-01-01 12:00  ...             10
2018-01-02 00:00:00   2018-01-02 0:00  ...              7
2018-01-02 12:00:00  2018-01-02 12:00  ...             16
2018-01-03 00:00:00   2018-01-03 0:00  ...              9

[5 rows x 8 columns]
2192

另外,我尝试了另一种选择:

data['date_time'] = pd.to_datetime(data['date_time'])
data['hours'] = data['date_time'].dt.hour
data[data['hours'] != 0]

同样的结果。该列已添加但未过滤数据。

            date_time  WindGustKmph  ...  windspeedKmph  hours
0 2018-01-01 00:00:00             8  ...              4      0
1 2018-01-01 12:00:00            12  ...             10     12
2 2018-01-02 00:00:00            14  ...              7      0
3 2018-01-02 12:00:00            18  ...             16     12
4 2018-01-03 00:00:00            19  ...              9      0

[5 rows x 9 columns]
2192

对于我所缺少的任何建议,我将不胜感激

标签: pythonpandasdataframe

解决方案


您需要将过滤后的数据集分配回data

data = data.between_time('07:00:00', '21:00:00')

或(您的第二个选项)

data = data[data['hours'].between(7, 21)]

推荐阅读