日期不能序列化
date can not be serialized
我在尝试将数据帧保存为文件时遇到错误。
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
我已经检查过该列 "object" 就像任何其他可以毫无问题地序列化的列一样。如果我从数据框中删除 "dob" 列,那么这条线将起作用。如果有日期+时间,这也将起作用。
fast-parquet 不接受只有日期?
尝试将 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
注意结果的数据类型:
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:
"The special value 'infer' will cause the type to be guessed from the first ten non-null values."
Fastparquet 没有 try to infer 它期望的日期值 bytes|utf8|json|bson|bool|int|float
。
我在尝试将数据帧保存为文件时遇到错误。
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
我已经检查过该列 "object" 就像任何其他可以毫无问题地序列化的列一样。如果我从数据框中删除 "dob" 列,那么这条线将起作用。如果有日期+时间,这也将起作用。
fast-parquet 不接受只有日期?
尝试将 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
注意结果的数据类型:
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:
"The special value 'infer' will cause the type to be guessed from the first ten non-null values."
Fastparquet 没有 try to infer 它期望的日期值 bytes|utf8|json|bson|bool|int|float
。