python - Python 3:如何将 AWS S3 中的多个 CSV 加载到 Pandas 数据框中?
问题描述
我正在处理连接到 EMR 集群的 AWS EMR Notebook。我通常习惯于在 Scala 中工作并将带有数千个 CSV 的 AWS S3 目录加载到 Spark DataFrame 中。但是,我无法使用 Python 3 模拟相同的方法。
我至少有一千个csv
像这样的文件:
s3://dir/part-00000-d27fd1c5-96d0-431c-88d8-4b216fe008d5-c000.csv
s3://dir/part-00001-d27fd1c5-96d0-431c-88d8-4b216fe008d5-c000.csv
...
s3://dir/part-12345-...
我尝试了这三种方法中的每一种,每种方法都由一个新行分隔:
df = pd.concat(map(pd.read_csv, glob.glob('s3://dir/*.csv')))
df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('', "s3://dir/*.csv"))))
path = r's3://dir' # use your path
all_files = glob.glob(os.path.join(path, "*.csv")) # advisable to use os.path.join as this makes concatenation OS independent
df_from_each_file = (pd.read_csv(f) for f in all_files)
concatenated_df = pd.concat(df_from_each_file, ignore_index=True)
每个都给出错误:ValueError: No objects to concatenate
故障排除提示
在最后一个解决方案的情况下,我注意到这all_files
是一个空列表:
path = r's3://dir' # use your path
all_files = glob.glob(os.path.join(path, "*.csv")) # advisable to use os.path.join as this makes concatenation OS independent
all_files
[]
另外,我试过:
os.listdir(path)
FileNotFoundError: [Errno 2] No such file or directory: 's3://dir'
当然,该目录存在,因为我可以在此 S3 目录中看到 CSV 文件。我也没有打错,因为我只是在复制粘贴。因此,这表明我可能无法从 EMR 集群中查看它。
请注意,我可以像这样加载单个 CSV:
df = pd.read_csv('s3://dir/part-00000-d27fd1c5-96d0-431c-88d8-4b216fe008d5-c000.csv')
df
但这对于我拥有的数千个 csv 文件中的每一个手动执行显然很难/效率低下。
关于其他尝试或如何调试的任何想法?
解决方案
如果您在所有.CSV
文件中都有相同的列,那么这可能只是适合您。
import pandas as pd
import glob
path = r'C:\DRO\DCL_rawdata_files' # use your path
all_files = glob.glob(path + "/*.csv")
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
在这里,我添加了header=0
以便在阅读.CSV
第一行后可以将其指定为列名。
推荐阅读
- angular - 用于 Angular 的 CKEditor5,用于图像的 Base64UploadAdapter 不起作用
- javascript - 在javascript中将类或id添加到对象中的项目
- reactjs - React.js 在 localStore 中未定义的值
- math - 非常数系数的递归关系
- sql - 根据值是否是另一列的子字符串来更新列值
- batch-file - CMD 递归批量重命名匹配模式的文件
- mysql - mysql: why below query unused union index?
- php - 在 OAuth 2.0 令牌更新后重定向用户的最佳做法是什么?
- microservices - 微服务架构中的数据库基础故障
- c++ - 数组错误以存储数字排序算法程序的随机变量值