![](/img/trans.png)
[英]Concatenating Multiple Objects into a single Pandas Dataframe with AWS S3 Bucket
[英]Python 3: How to load multiple CSVs in AWS S3 into a Pandas dataframe?
我正在處理連接到 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
后可以將第一行指定為列名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.