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

解析具有远期日期的CSV到Parquet

如何解决解析具有远期日期的CSV到Parquet

我正在尝试将CS​​V读入Pandas,然后将其写入Parquet。挑战在于CSV的date列的值为3000-12-31,显然Pandas无法将该值存储为实际日期。因此,PyArrow无法读取日期值。

要复制的示例文件代码

test.csv

t
3000-12-31
import pandas as pd
import pyarrow as pa
df = pd.read_csv("test.csv",parse_dates=["t"])
schema = pa.schema([pa.field("t",pa.date64())])
table = pa.Table.from_pandas(df,schema=schema)

这给出了(有些无益的错误

TypeError:必须为整数(got类型为str)

什么是正确的方法

解决方法

Pandas datetime列(使用datetime64[ns]数据类型)确实不能存储此类日期。

一个可能的解决方法是将字符串转换为对象dtype列中的datetime.datetime个对象。然后pyarrow应该能够接受它们来创建日期列。 例如,可以使用dateutil完成此转换:

>>> import dateutil
>>> df['t'] = df['t'].apply(dateutil.parser.parse)
>>> df
                     t
0  3000-12-31 00:00:00

>>> table = pa.Table.from_pandas(df,schema=schema)
>>> table
pyarrow.Table
t: date64[ms]

或者如果您使用固定格式,则使用datetime.date.strptime可能更可靠:

>>> import datetime
>>> df['t'] = df['t'].apply(lambda s: datetime.datetime.strptime(s,"%Y-%m-%d"))
>>> table = pa.Table.from_pandas(df,schema=schema)
>>> table
pyarrow.Table
t: date64[ms]

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

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?