python - 在熊猫数据框中过滤和操作日期时间
问题描述
好的,伙计们,我想知道发生了什么。我有一只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
. 现在今天reading
从CSV
并尝试将数据拆分chunks
为dates
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
列
解决方案
所以我想出了最有效的方法来做到这一点,它给了我准确的框架而没有日期泄漏。
使用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)
推荐阅读
- css - 将结果与输入字段对齐的问题
- regex - 正则表达式 - 解析文本字符串中的两个字符串(名字和姓氏)
- pytorch - PyTorch 的 CrossEntropyLoss - 如何用转换器处理序列长度维度?
- google-sheets - 谷歌表格匹配任何文本
- python - 非阻塞可视化 Open3D
- python - 如何使用 Selenium 打开链接列表并抓取文本
- web - WebScraping /相同的网站不起作用?
- javascript - 数据集值在未定义值和正确值之间随机变化
- python - 如何使用 Python 将充满 .csv 文件的文件夹转换为 .xlsx 文件?
- python - Python:如何根据标量值检查 csv 文件的一行中的每个值?