gpt4 book ai didi

python - 使用 pandas read_csv 读取缺失日期的最安全方法——给定的空格会变成今天的日期错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:29 24 4
gpt4 key购买 nike

py2.7 Pandas 版本 .13

读取 csv 并将列转换为日期的最安全方法是什么。我注意到在我的例子中,日期列中的空白被转换为今天的日期。为什么?

这是我的 csv 数据

fake_file = StringIO.StringIO("""case,opdate,
7,10/18/2006,
7,10/18/2008,
621, ,""")

这是我的代码

df=pd.DataFrame(pd.read_csv('path.csv',parse_dates=['opdate']))

悲惨地用今天的日期填满了空白!

df=pd.DataFrame(pd.read_csv('path.csv',parse_dates=['opdate'],na_values=' '))

有效,但我真的必须知道它始终是“”,而不是说“”或“空”。

转换日期和保留空值的最安全方法是什么(特别是当空值不是一致的值时)?

最佳答案

一种方法是将不同的日期解析器传递给 read_csv (我也输入了一个空值):

fake_file = StringIO.StringIO("""case,opdate,
7,null,
7,10/18/2008,
621, ,""")

In [11]: parser = lambda x: pd.to_datetime(x, format='%m/%d/%Y', coerce=True)

In [12]: pd.read_csv(fake_file, parse_dates=['opdate'], date_parser=parser)
Out[12]:
case opdate Unnamed: 2
0 7 NaT NaN
1 7 2008-10-18 NaN
2 621 NaT NaN

[3 rows x 3 columns]

另一种选择是使用 to_datetime 转换为事后日期:

In [21]: df = pd.read_csv(fake_file)

In [22]: pd.to_datetime(df.opdate, format='%m/%d/%Y')
ValueError: time data 'null' does not match format '%m/%d/%Y'

In [23]: pd.to_datetime(df.opdate, format='%m/%d/%Y', coerce=True)
Out[23]:
0 NaT
1 2008-10-18
2 NaT
Name: opdate, dtype: datetime64[ns]

In [24]: df['opdate'] = pd.to_datetime(df.opdate, format='%m/%d/%Y', coerce=True)

我认为 to_datetimeread_csv 都将空格/空格转换为今天的日期这一事实是 definitely a bug ...

关于python - 使用 pandas read_csv 读取缺失日期的最安全方法——给定的空格会变成今天的日期错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21922978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com