微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Pandas 读取 csv 文件时将时间戳元组解析为日期

如何解决使用 Pandas 读取 csv 文件时将时间戳元组解析为日期

我有许多 CSV 文件,我需要将时间作为索引解析为 Pandas 数据帧。我会自动解析文件 using df = pd.read_csv("infile.csv",parse_dates=["index"],dayfirst=False) 中的日期。对于我的某些文件,这会失败,因为没有找到正确的日期格式,而是一个如下所示的时间戳元组

,index,tos,model_member,member_id,model,experiment_id
0,"(0,Timestamp('1950-01-31 00:00:00'),0)",4.740208145290402,KACE-1-0-G-r1i1p1f1_ssp245,r1i1p1f1_ssp245,KACE-1-0-G,ssp245
1,1)",ssp245
2,2)",ssp245
3,3)",ssp245

我一直在寻找一种在读取文件期间将其转换为日期的好方法,但我找不到。任何的意见都将会有帮助。时间戳来自从 NetCDF 文件提取数据,然后使用 Python 库 xarray函数 [xarray.Dataset.to_netcdf][2] 将数据写入 CSV。如果有一种方法可以避免首先将时间戳写入文件,而是避免将字符串日期写入文件,我也会非常感兴趣。 %Y-%m-%h。我看到了与我很接近的问题,但 their solutions 对我不起作用。我目前将数据写入文件的方式是,我认为这是可行的:

 df.to_csv("filename.csv",date_format='%Y-%m-%d')

解决方法

您可以在不进行任何自动日期解析的情况下读取 csv,然后通过捕获 r"'(.*)'" 手动 extract 日期:

df = pd.read_csv('infile.csv',index_col=0)
df['index'] = df['index'].str.extract(r"'(.*)'")
df['index'] = pd.to_datetime(df['index'])
索引 tos model_member member_id 型号 experiment_id
0 1950-01-31 4.740208 KACE-1-0-G-r1i1p1f1_ssp245 r1i1p1f1_ssp245 KACE-1-0-G ssp245
1 1950-01-31 4.740208 KACE-1-0-G-r1i1p1f1_ssp245 r1i1p1f1_ssp245 KACE-1-0-G ssp245
2 1950-01-31 4.740208 KACE-1-0-G-r1i1p1f1_ssp245 r1i1p1f1_ssp245 KACE-1-0-G ssp245
3 1950-01-31 4.740208 KACE-1-0-G-r1i1p1f1_ssp245 r1i1p1f1_ssp245 KACE-1-0-G ssp245

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。