首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pandas.read_csv()可以在同一列中应用不同的日期格式!是已知的窃听器吗?怎么修呢?

pandas.read_csv()可以在同一列中应用不同的日期格式!是已知的窃听器吗?怎么修呢?
EN

Stack Overflow用户
提问于 2019-03-22 23:51:57
回答 1查看 1.5K关注 0票数 8

我已经意识到,除非日期列的格式被显式或半显式地声明(使用dayfirst),熊猫在读取csv文件时可以将不同的日期格式应用于同一列!一行可能是dd/mm/yyyy,另一行可能在同一列mm/dd/yyyy!癫狂甚至都没有描述它!是已知的窃听器吗?

为了演示:下面的脚本创建了一个非常简单的表,其日期为1月1日至31日,格式为dd/mm/yyyy,将其保存到csv文件中,然后读取csv。

然后,我使用pandas.DatetimeIndex提取一天。嗯,前12天是1天(月和日都< 13),之后是1314等等。这到底是怎么可能的?

解决这个问题的唯一方法是显式地或仅使用dayfirst=True声明日期格式。但这是一个痛苦,因为这意味着我必须声明日期格式,即使当我导入csv与最好的格式日期!有更简单的方法吗?

在Windows 10环境下,熊猫0.23.4和Python3.7.1也是如此。

代码语言:javascript
运行
复制
import numpy as np
import pandas as pd
df=pd.DataFrame()
df['day'] =np.arange(1,32)
df['day']=df['day'].apply(lambda x: "{:0>2d}".format(x)  )
df['month']='01'
df['year']='2018'
df['date']=df['day']+'/'+df['month']+'/'+df['year']
df.to_csv('mydates.csv', index=False)

#same results whether you use parse_dates or not
imp = pd.read_csv('mydates.csv',parse_dates=['date'])
imp['day extracted']=pd.DatetimeIndex(imp['date']).day
print(imp['day extracted'])
EN

回答 1

Stack Overflow用户

发布于 2021-07-28 17:17:35

默认情况下,它采用美国的日期格式,如果操作失败,它实际上会切换到中间列,而不会引发错误。虽然它打破了Python的禅意,让这个错误悄悄地传递,但是“显式比隐式好”。因此,如果您知道您的数据具有国际格式,则可以使用dayfirst

代码语言:javascript
运行
复制
imp = pd.read_csv('mydates.csv', parse_dates=['date'], dayfirst=True)

对于您生成的文件,请使用带有时区指示符的ISO 8601格式进行明确处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55309199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档