Pandas数据帧日期时间筛选器不工作

2024-09-28 23:41:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习如何使用pandas dataframe并尝试预处理一些数据。我有一组显示天气的数据,数据时间字段是一个字符串。每天在此数据集中显示两次,分别为00:00和12:00。我正在尝试过滤它,并只保留12:00小时的数据。我尝试了一些建议的选项here

#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

如果您能给我一些建议,我将不胜感激


Tags: columnsto数据onlydatadatetime建议
2条回答

我不喜欢7:00:00和21:00:00的比较。 你为什么不直接做呢

data = data[data['date_time'].dt.hour == 12]

您需要将筛选后的数据集分配回data

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

或者(你的第二选择)

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

相关问题 更多 >