我正在尝试读取多个结构相同(列名)且位于几个文件夹中的CSV文件。我的主要目的是将这些文件连接到一个熊猫数据框中。 请在附件的文件夹位置分布下面找到附件,因此每个文件夹包含5个CSV文件。 是否有任何预定义的功能或功能可以帮助??
答案 0 :(得分:4)
您可以使用glob.glob('*.csv')
查找所有csv,然后将其全部合并。
import glob
import pandas as pd
csv_paths = glob.glob('*.csv')
dfs = [pd.read_csv(path) for path in csv_paths]
df = pd.concat(dfs)
答案 1 :(得分:1)
import os
import pandas as pd
outdir = [YOUR_INITIAL_PATH]
df_final = pd.DataFrame(columns=['column1', 'column2', 'columnN']) # creates an empty df with the desired structure
for root, dirs, filenames in os.walk(outdir):
for f in filenames:
if f.endswith('.csv'):
df_temp = pd.read_csv(root + '\\' + f)
df_final = pd.concat([df_final, df_temp])
答案 2 :(得分:1)
您可以使用os.walk()
遍历目录树(example)中的文件。 pd.read_csv()
将单个文件读入数据帧。 pd.concat(df_list)
将df_list中的所有数据帧连接在一起。
我不认为有一种方法可以将以上所有内容结合在一起,以方便您使用。
答案 3 :(得分:1)
疯狂的猕猴桃给了您正确的答案。一种替代方法是使用dask
,假设您的文件夹结构为
data
├── 2016
│ ├── file01.csv
│ ├── file02.csv
│ └── file03.csv
├── 2017
│ ├── file01.csv
│ ├── file02.csv
│ └── file03.csv
└── 2018
├── file01.csv
├── file02.csv
然后您可以通过阅读所有内容
import dask.dataframe as dd
import pandas as pd
df = dd.read_csv("data/*/*.csv")
# convert to pandas via
df = df.compute()
答案 4 :(得分:0)
这是解决此问题的最佳方法:
import os
import glob
import pandas as pd
def nested_files_to_df(path,ext):
paths = []
all_data = pd.DataFrame()
#--- Putting all files name in one list ---#
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(tuple(ext)):
s = os.path.join(root, file)
paths.append(s)
#--- Reading and merging all the existing excel files into one dataframe ---#
for f in paths:
df = pd.read_excel(f)
all_data = all_data.append(df,ignore_index=True)
return all_data
调用函数:
df= nested_files_to_df('Your main folder root',[".xls",".XLS",".xlsx"])