将实木复合地板数据转换为熊猫数据框时,数据类型出现问题

时间:2019-02-25 12:45:04

标签: pandas parquet pyarrow apache-arrow

将实木复合地板文件转换为数据框时,文件类型存在问题。

我愿意

bucket = 's3://some_bucket/test/usages'

import pyarrow.parquet as pq
import s3fs
s3 = s3fs.S3FileSystem()

read_pq = pq.ParquetDataset(bucket, filesystem=s3).read_pandas()

当我做read_pq时,我会得到

pyarrow.Table
_COL_0: decimal(9, 0)
_COL_1: decimal(9, 0)
_COL_2: decimal(9, 0)
_COL_3: decimal(9, 0)

当我做df = read_pd.to_pandas(); df.dtypes时,我会得到

_COL_0    object
_COL_1    object
_COL_2    object
_COL_3    object
dtype: object

原始数据都是整数。当我对pandas数据框中的对象进行操作时,操作非常缓慢。

  • 如何将实木复合地板的列转换为大熊猫中的整数或浮点数的格式?
  • 还是最好对上述熊猫数据框进行操作并使用pd.to_numeric或类似的方法?
  • 还是原始数据格式decimal(9, 0)有问题?

还是最好直接在熊猫数据框上进行转换?

我尝试过:read_pq.column('_COL_0').cast('int32')抛出类似错误

No cast implemented from decimal(9, 0) to int32

1 个答案:

答案 0 :(得分:0)

Pandas 对整数等很有趣。根据我在阅读 Pandas 文档时的理解,Pandas 似乎并没有真正的 int 与 float 的概念,并且主要适用于 float 值。

在这种情况下,我会继续使用 astype 开始处理您的数据,如下所示:

df['_COL_0'] = df['_COL_0'].astype(float)

如果它们真的都是整数,那么您应该能够使用这个简单的 for 循环将所有 Pandas 系列(列)转换为浮点值,如下所示:

for col in df.columns:
  df[col] = df[col].astype(float)

如果这对您有用,请告诉我,我刚刚在我的 Jupyter NoteBook 中运行了一个测试,它似乎成功了。