簡體   English   中英

awswrangler 返回具有不同數據類型的數據幀

[英]awswrangler returning dataframes with different dtypes

我正在使用awswrangler將一個簡單的數據幀轉換為 parquet 將其推送到 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_dataset) 時,我得到了 (int64 和 Int64) dtypes

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

這導致數據幀不相等。 這是一個錯誤還是我錯過了什么?

首先,這里的區別在於 numpy 和 pandas 類型之間。 int64代表 numpy 類型( np.int64 )和Int64代表熊貓類型( 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM