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 データフレーム内のオブジェクトを操作すると、操作が非常に遅くなります。

  • 寄木細工の列を int または pandas の 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

パンダは整数などについて面白いです。パンダのドキュメントを読んで理解していることから、パンダは int と float の概念を実際には持っていないようで、ほとんどが float 値で動作します。

この状況では、次のように astype を使用してデータの操作を開始します。

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

それらが本当にすべて整数である場合、この単純な for ループを使用して、次のようにすべての pandas シリーズ (列) を float 値にキャストできるはずです。

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

これがうまくいくかどうか教えてください。Jupyter NoteBook でテストを実行したところ、うまくいったようです。

于 2021-07-12T02:01:21.547 に答える