6

将镶木地板文件转换为数据框时,我遇到了文件类型问题。

我愿意

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 数据框中的对象进行操作时,操作非常缓慢。

  • 如何将 parquet 列转换为在 pandas 中读取为 int 或 float 的格式?
  • 还是最好像上面那样对熊猫数据框进行操作并使用pd.to_numeric或类似?
  • 还是原始数据格式有问题decimal(9, 0)

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

我试过:read_pq.column('_COL_0').cast('int32')抛出一个错误

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

1 回答 1

1

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 中进行了测试,它似乎成功了。

于 2021-07-12T02:01:21.547 回答