我想串联几个保存在目录./Errormeasure
中的csv文件。为此,我使用了另一个线程https://stackoverflow.com/a/51118604/9109556
filepaths =[f for f in listdir('./Errormeasure')if f.endswith('.csv')]
df=pd.concat(map(pd.read_csv,filepaths))
print(df)
但是,只有当我要在./Errormeasure
目录以及下面的目录./venv
中都包含csv文件时,此代码才有效。但是,这显然不方便。
当我仅在./Errormeasure
中包含csv文件时,收到以下错误:
FileNotFoundError: [Errno 2] File b'errormeasure_871687110001543570.csv' does not exist: b'errormeasure_871687110001543570.csv'
您能给我一些解决这个问题的技巧吗?我正在使用pycharm。 预先感谢!
答案 0 :(得分:1)
使用os.listdir()
仅检索文件名,而不检索相对(熊猫脚本所在的地方)或绝对级别的pandas.read_csv()
所需的父文件夹。
相反,请考虑内置glob
的 recursive 功能(仅在Python 3.5+中可用)返回顶级和子文件夹中所有csv文件的完整路径。>
import glob
for f in glob.glob(dirpath + "/**/*.csv", recursive=True):
print(f)
从那里构建列表理解中的数据帧(绕过map
-参见List comprehension vs map)与pd.concat
串联:
df_files = [pd.read_csv(f) for f in glob.glob(dirpath + "/**/*.csv", recursive=True)]
df = pd.concat(df_files)
print(df)
对于Python <3.5,请考虑使用os.walk()
+ os.listdir()
来检索csv文件的完整路径:
import os
import pandas as pd
# COMBINE CSVs IN CURR FOLDER + SUB FOLDERS
fpaths = [os.path.join(dirpath, f)
for f in os.listdir(dirpath) if f.endswith('.csv')] + \
[os.path.join(fdir, fld, f)
for fdir, flds, ffile in os.walk(dirpath)
for fld in flds
for f in os.listdir(os.path.join(fdir, fld)) if f.endswith('.csv')]
df = pd.concat([pd.read_csv(f) in for f in fpaths])
print(df)
答案 1 :(得分:0)
import pandas as pd
import glob
path = r'C:\Directory' # use your path
files = glob.glob(path + "/*.csv")
list = []
for file in files:
df = pd.read_csv(file, index_col=None, header=0)
list.append(df)
frame = pd.concat(list, axis=0, ignore_index=True)
也许您需要使用'\'代替'/'
file = glob.glob(os.path.join(your\\path , '.csv'))
print(file)
您可以在for循环上运行以上代码。