【问题标题】:EmptyDataError: No columns to parse from file when reading multiple csv files from S3 bucket to pandas DataframeEmptyDataError:从 S3 存储桶读取多个 csv 文件到 pandas Dataframe 时,没有要从文件解析的列
【发布时间】:2020-11-18 17:55:04
【问题描述】:

我有一个包含大约 500 个 csv 文件的源 s3 存储桶,我想将这些文件移动到另一个 s3 存储桶,并且在移动之前我想清理数据,因此我试图将其读取到 pandas 数据帧。我的代码工作正常并返回几个文件的数据帧,然后它突然中断并给我错误“EmptyDataError: No columns to parse from file”。

sts_client = boto3.client('sts', region_name='us-east-1')
client = boto3.client('s3')

bucket = 'source bucket'
folder_path = 'mypath'

def get_keys(bucket,folder_path):
    keys = []
    resp = client.list_objects(Bucket=bucket, Prefix=folder_path)
    for obj in resp['Contents']:
        keys.append(obj['Key'])
    return keys

files = get_keys(bucket,folder_path)
print(files)

for file in files:
    f = BytesIO()
    client.download_fileobj(bucket, file, f)
    f.seek(0)
    obj = f.getvalue()
    my_df = pd.read_csv(f ,header=None, escapechar='\\', encoding='utf-8', engine='python')
    # files dont have column names, providing column names
    my_df.columns = ['col1', 'col2','col3','col4','col5']
    print(my_df.head())

提前致谢!

【问题讨论】:

  • 手动下载坏文件看看

标签: python pandas amazon-web-services csv amazon-s3


【解决方案1】:

您的文件大小为零。代替 os.path.getsize(file) 使用分页器检查如下:

import boto3

client = boto3.client('s3', region_name='us-west-2')
paginator = client.get_paginator('list_objects')
page_iterator = paginator.paginate(Bucket='my-bucket')
filtered_iterator = page_iterator.search("Contents[?Size > `0`][]")
for key_data in filtered_iterator:
    print(key_data)

【讨论】:

  • 感谢您的回复,您能告诉我如何根据文件夹路径从您的代码结果中提取密钥
  • bucket = 'bucket' folder_path = 'path' def get_s3_keys(bucket,folder_path): keys = [] paginator = client.get_paginator('list_objects') page_iterator = paginator.paginate(Bucket=bucket) filtered_iterator = page_iterator.search("Contents[?Size > 0][]") for obj in filtered_iterator['Contents']: keys.append(obj['Key']) return keys files = get_s3_keys(bucket,folder_path) print(files)
猜你喜欢
  • 1970-01-01
  • 2022-07-13
  • 2018-11-07
  • 2022-08-04
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 1970-01-01
相关资源
最近更新 更多