【问题标题】:Datatypes issue when convert parquet data to pandas dataframe将镶木地板数据转换为熊猫数据框时的数据类型问题
【发布时间】:2019-07-18 21:01:10
【问题描述】:

在将 parquet 文件转换为数据框时,我遇到了文件类型问题。

我愿意

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 的格式?
  • 或者最好还是像上面那样对 pandas 数据框进行操作并使用pd.to_numeric 或类似的?
  • 还是原始数据格式decimal(9, 0)有问题?

还是直接在 pandas 数据框上转换最好?

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

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

【问题讨论】:

    标签: pandas parquet pyarrow apache-arrow


    【解决方案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 中运行了一个测试,它似乎成功了。

    【讨论】:

    • @clog14 你最终尝试过这个吗?如果是这样,它对你有用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2021-02-28
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多