awswrangler返回具有不同数据类型的数据帧

2024-06-17 12:09:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用awswrangler将一个简单的数据帧转换为拼花地板,将它推到一个s3桶中,然后再次读取。代码如下:

import boto3
import awswrangler as wr
import pandas as pd
test_bucket = 'test-bucket'
test_data = 'test_data.parquet'
s3 = boto3.client('s3')
df1 = pd.DataFrame(
        [[1990, 1], [2000, 2], [1985, 6]], columns=["Feature1", "Feature2"]
    )
wr.s3.to_parquet(df=df1, path=f"s3://{test_bucket}/{test_data}")
raw_data_s3_objects = s3.list_objects(Bucket=test_bucket)

for path in raw_data_s3_objects["Contents"]:
    file_name = path["Key"]
    raw_dataset = wr.s3.read_parquet(path=f"s3://{test_bucket}/{file_name}")

当我打印原始数据帧(df1)和输出的数据帧(raw_数据集)时,我得到了(int64和int64)数据类型

print(df1.dtypes)
print(raw_dataset.dtypes)
Feature1    int64
Feature2    int64
dtype: object
Feature1    Int64
Feature2    Int64
dtype: object

这会导致数据帧不相等。这是一个错误还是我遗漏了什么


Tags: 数据pathtestimportdatarawobjectss3
1条回答
网友
1楼 · 发布于 2024-06-17 12:09:10

第一件事是,这里的区别是努比和熊猫类型之间的区别int64代表numpy类型(np.int64),而Int64代表pandas类型(pd.Int64Dtype

这是在https://github.com/awslabs/aws-data-wrangler/issues/580中报告的,这是有原因的,但这在realease 2.6.0中是“固定”的。现在,您可以通过使用map_types参数(默认值为True来完成您不希望的转换):

raw_dataset = wr.s3.read_parquet(path=f"s3://{test_bucket}/{file_name}", map_types=False)

相关问题 更多 >