python - 连接多个数据帧。数据路径问题
问题描述
我想连接我保存在一个目录中的几个 csv 文件./Errormeasure
。为此,我使用了来自另一个线程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
目录以及下面的目录中连接的 csv 文件时,./venv
. 然而,这显然不方便。当我只有 csv 文件时./Errormeasure
,我收到以下错误:
FileNotFoundError: [Errno 2] File b'errormeasure_871687110001543570.csv' does not exist: b'errormeasure_871687110001543570.csv'
你能给我一些解决这个问题的建议吗?我正在使用pycharm。提前致谢!
解决方案
使用仅检索文件名而不是在相对(熊猫脚本所在的位置)或绝对级别os.listdir()
所需的父文件夹。pandas.read_csv()
而是考虑内置的递归glob
功能(仅在Python 3.5+中可用)返回顶级和子文件夹中所有 csv 文件的完整路径。
import glob
for f in glob.glob(dirpath + "/**/*.csv", recursive=True):
print(f)
从那里构建列表理解中的数据框(绕过map
-请参阅列表理解与 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)
推荐阅读
- neural-network - caffe CNN:跨渠道汇集
- mysql - ADODB.Recordset 错误“800a0cc1”
- html - 如何更改导航栏的背景?
- r - R查询中的摘要函数
- c# - Ajax PagedList Reload 每次都返回第一页
- java - Context.openFileInput 和 Context.openFileOutput 之间的同步
- java - 在 JPA 中使用 FetchMode.SUBSELECT 替代休眠 @FetchProfile
- uwp - 如何在 WinJS 中实现二维码扫描器
- mysql - MYSQL,错误 1062
- regex - 从powershell字符串中提取整数