将实木复合地板文件转换为数据框时,文件类型存在问题。
我愿意
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
答案 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 中运行了一个测试,它似乎成功了。