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