我正在尝试使用Pandas和Pyarrow来拼花数据。我有数百个拼花文件,它们不需要具有相同的模式,但如果列在拼花中匹配,它们必须具有相同的数据类型。
我遇到的情况是,生成的拼花数据类型不是我想要的。例如,我可能会将int64
写入列,生成的拼花将采用double
格式。这在处理方面造成了很多麻烦,99%的数据输入正确,但在1%的情况下,它只是错误的类型。
我尝试过导入numpy并以这种方式包装值-
import numpy as np
pandas.DataFrame({
'a': [ np.int64(5100), np.int64(5200), np.int64(5300) ]
})
但是我仍然偶尔得到双精度,所以这一定是错误的方法。我如何确保数据类型在镶木地板文件的列之间是一致的?
更新-
我发现只有当列包含一个或多个无
时才会发生这种情况。
data_frame = pandas.DataFrame({
'a': [ None, np.int64(5200), np.int64(5200) ]
})
拼花地板不能处理混合Nown-int64铝合金吗?
Pandas本身目前无法处理整数列中的null/na值(版本0.23. x)。在下一个版本中,将有一个可空的整数类型。同时,一旦整数列中有空值,Pandas会自动将其转换为浮点列。因此,您在生成的Parquet文件中也有一个浮点列:
import numpy as np
import pandas as pd
df = pd.DataFrame({
'a': [np.int64(5100), np.int64(5200), np.int64(5300)]
})
# df['a'].dtype == dtype('int64')
df = pd.DataFrame({
'a': [None, np.int64(5200), np.int64(5200)]
})
# df['a'].dtype == dtype('float64')