我在尝试将数据框保存为文件时收到错误。
from fastparquet import write
write('profile_dtl.parq', df)
该错误与" date"相关。并且错误消息看起来像这样......
ValueError: Can't infer object conversion type: 0 1990-01-01
1 1954-01-01
2 1981-11-15
3 1993-01-21
4 1948-01-01
5 1977-01-01
6 1968-04-28
7 1969-01-01
8 1989-01-01
9 1985-01-01
Name: dob, dtype: object
我已经检查过该列是"对象"就像任何其他可以序列化而没有任何问题的列一样。如果我删除" dob"从数据框中的列,然后这一行将起作用。如果有日期+时间,这也会有效。
快速镶木地板不接受日期?
答案 0 :(得分:1)
尝试将dob
更改为datetime64
dtype:
import pandas as pd
dob = pd.Series(['1954-01-01', '1981-11-15', '1993-01-21', '1948-01-01',
'1977-01-01', '1968-04-28', '1969-01-01', '1989-01-01',
'1985-01-01'], name='dob')
Out:
0 1954-01-01
1 1981-11-15
2 1993-01-21
3 1948-01-01
4 1977-01-01
5 1968-04-28
6 1969-01-01
7 1989-01-01
8 1985-01-01
Name: dob, dtype: object
请注意产生的dtype:
pd.to_datetime(dob)
Out:
0 1954-01-01
1 1981-11-15
2 1993-01-21
3 1948-01-01
4 1977-01-01
5 1968-04-28
6 1969-01-01
7 1989-01-01
8 1985-01-01
dtype: datetime64[ns]
将此系列用作DataFrame中的索引:
baz = list(range(9))
foo = pd.DataFrame(baz, index=pd.to_datetime(dob), columns=['dob'])
您现在应该可以保存您的Parquet文件了。
from fastparquet import write
write('foo.parquet', foo)
$ls -l foo.parquet
-rw-r--r-- 1 moi admin 854 Oct 13 16:44 foo.parquet
<小时/> 您的
dob
系列有一个对象dtype,而object_encoding='infer'
参数保持不变fastparquet.write
。所以,从docs:
“特殊值'推断'将导致从前十个非空值中猜出类型。”
Fastparquet没有try to infer日期值与bytes|utf8|json|bson|bool|int|float
之间的日期值相同。