[英]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.