我正在尝试循环遍历包含多个 CSV 文件的目录并将它们读入(单独的)pandas 数据帧。 我尝试了多种方法,但我无法做到这一点。不过,我确实设法读取了 CSV 文件并将它们放入列表中。然而,当尝试读取 CSV 文件时,我的 python 找不到该文件。
我已经尝试过这段代码(我做了一个匿名路径):
import pandas as pd
import os
path = r'C:\path\UV'
directory = os.fsencode(path)
lijst = []
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename.endswith(".csv"):
#print(os.path.join(filename))
lijst.append(file)
#df = pd.read_csv(file)
continue
else:
continue
lijst
for i in lijst:
df = pd.read_csv(filename)
#pd.read_csv("UltraViolet1")
这会出现错误,代码无法读取文件(它们被命名为 UltraViolet1 等) 有谁知道这里出了什么问题吗?
问题似乎是您在尝试读入数据帧时使用文件名而不是文件的完整路径。
read_csv
需要完整路径。这是一个修复:
import pandas as pd
import os
path = r'C:\path\UV'
dataframes = []
for filename in os.listdir(path):
if filename.endswith(".csv"):
file_path = os.path.join(path, filename)
df = pd.read_csv(file_path)
dataframes.append(df)
for df in dataframes:
print(df.head())
这里的问题(可能)是
os.listdir
只返回文件名。 它不返回实际路径。 因此,如果您从 path
以外的目录运行此文件,将找不到这些文件。
我建议:
import glob
import pandas as pd
names = glob.glob('C:/path/UV/*.csv')
for name in names:
df = pd.read_csv(name)
但请注意,这会一遍又一遍地覆盖
df
变量。 您可能希望将数据帧保存在列表中。
从OP中获取线索,
import glob
import pandas as pd
names = glob.glob('C:/path/UV/*.csv')
final_df=[]
for name in names:
df = pd.read_csv(name)
final_df.append(df)
df_f=pd.concat(final_df, axis =0).reset_index()
希望这有帮助。
以下是如何读取多个 CSV 文件并将它们放入单独的 Pandas 数据帧中:
import pandas as pd
import os
data_dir = "path/to/your/csv/data"
dataframes = {}
for filename in os.listdir(data_dir):
if filename.endswith(".csv"):
filepath = os.path.join(data_dir, filename)
df = pd.read_csv(filepath)
dataframes[filename] = df
print(dataframes['file1.csv'].head())