首页 > 解决方案 > 在熊猫数据框中过滤和操作日期时间

问题描述

好的,伙计们,我想知道发生了什么。我有一只dataframe从中拉出来的熊猫MySQL

事实上,这是我的查询语法:

query = "SELECT * FROM mywebsite.com WHERE date BETWEEN '2019-12-01' AND '2020-03-31'"

websitedata = pd.read_sql(query,con=engine)

然后我exported将数据作为CSV. 现在今天readingCSV并尝试将数据拆分chunksdates

Dec2019 = df.loc[(df.date >= "2019-12-01") & (df.date <= "2019-12-31")]
Jan2020 = df.loc[(df.date >= "2020-01-01") & (df.date <= "2020-01-31")]
Feb2020 = df.loc[(df.date >= "2020-02-01") & (df.date <= "2020-02-29")]
Mar2020 = df.loc[(df.date >= "2020-03-01") & (df.date <= "2020-03-31")]


len(df) == len(Dec2019) + len(Jan2020) + len(Feb2020) + len(Mar2020) # gives me False

事实上len(Dec2019) + len(Jan2020) + len(Feb2020) + len(Mar2020)376440

len(df)给出384274

如何预览框架以查看问题所在?喜欢 2019 年 12 月、2020 年 1 月、...、2020 年 3 月等了解问题?

PS:日期已经是一pandas datetime

标签: pythonpandasdataframedatetimepandasql

解决方案


所以我想出了最有效的方法来做到这一点,它给了我准确的框架而没有日期泄漏。

使用datetime dt accessor

Jan2020 = df[df.date.dt.month == 1]
Dec2019 = df[df.date.dt.month == 12]
Feb2020 = df[df.date.dt.month == 2]
Mar2020 = df[df.date.dt.month == 3]

事实上,这现在返回True

len(df) == len(Dec2019) + len(Jan2020) + len(Feb2020) + len(Mar2020)

信用:如何按特定月/日过滤日期数据框?


推荐阅读