我有2年的每日销售数据,分为月度文件。
我有多个文件夹,每个文件夹包含多个csv。 我想用熊猫在Python中阅读它。
我尝试了1个文件夹
path =r'C:\DRO\DCL_rawdata_files' # use your path
allFiles = glob.glob(path + "/*.csv")
frame = pd.DataFrame()
list_ = []
for file_ in allFiles:
df = pd.read_csv(file_,index_col=None, header=0)
list_.append(df)
frame = pd.concat(list_)
但是如上所述,对于1个文件夹,同样明智的是,我对100个文件夹运行了相同的代码块100次。
使用它们的某种方法来减少每个文件夹的运行一次吗?
答案 0 :(得分:0)
我已经对您所描述的内容进行了模拟,文件夹结构如下:
/test/so/
1/
a.csv
b.csv
2/
c.csv
d.csv
3/
e.csv
f.csv
以下代码:
pathlib.Path
.csv
的文件.csv
文件列表,将其打开为pd.DataFrame 此方法的局限性在于它希望所有文件的格式相同。
import pandas as pd
from pathlib import Path
p = Path('/test/so/')
files = []
file_extensions = ['.csv']
for file_or_directory in p.iterdir():
if file_or_directory.is_file() and ''.join(file_or_directory.suffixes).lower() in file_extensions:
files.append(file_or_directory)
elif file_or_directory.is_dir():
files.extend([x for x in file_or_directory.iterdir() if ''.join(x.suffixes).lower() in file_extensions])
print(files)
[PosixPath('/test/so/1/a.csv'), PosixPath('/test/so/1/b.csv'),
PosixPath('/test/so/2/c.csv'), PosixPath('/test/so/2/d.csv'),
PosixPath('/test/so/3/e.csv'), PosixPath('/test/so/3/f.csv')]
df_list = []
for f in files:
try:
df_list.append(pd.read_csv(filepath_or_buffer=f))
except pd.errors.ParserError as e:
raise pd.errors.ParserError('Input file probably not expected format')
df = pd.concat(df_list, ignore_index=True)
print(df)
0 1 2 3
0 a b c d
1 e f g h
2 i j k l
3 m n o p
4 q r s t
5 u v w x