Pandas Dataframe Parquet数据类型?

问题描述 投票:3回答:1

我正在尝试使用Pandas和Pyarrow来拼接数据。我有数百个镶木地板文件,不需要具有相同的模式,但如果列匹配parquets,它们必须具有相同的数据类型。

我遇到了生成的镶木地板数据类型不是我想要的情况。例如,我可能会将int64写入一列,并且生成的镶木地板将采用double格式。这在处理方面造成了很多麻烦,其中99%的数据被正确输入,但在1%的情况下,它只是错误的类型。

我试过导入numpy并以这种方式包装值 -

import numpy as np

pandas.DataFrame({
  'a': [ np.int64(5100), np.int64(5200), np.int64(5300) ]
})

但我仍然偶尔会加倍,所以这一定是错误的做法。如何确保数据类型在镶木地板文件中的列之间保持一致?

最新情况:

我发现只有当列包含一个或多个Nones时才会发生这种情况。

data_frame = pandas.DataFrame({
  'a': [ None, np.int64(5200), np.int64(5200) ]
})

镶木地板不能处理混合的None-int64 cols?

python pandas numpy parquet pyarrow
1个回答
5
投票

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')
© www.soinside.com 2019 - 2024. All rights reserved.