Python Pandas - 导入文件夹中的所有 CSV 文件,仅选取 1 个文件

Python Pandas - import all CSV files in folder, only picking up 1 file

你好 Whosebug 社区!

在这里挣扎的新 python 人。我的代码确实有效,直到我向其中添加了更多代码并且我试图弄清楚我做错了什么来搞砸它。我正在尝试导入文件、读取文件名、删除列、重置索引、用文件名填充列(稍后我需要该信息),然后转到下一个文件。

出于某种原因,它只导入文件夹中的最后一个文件。我知道我做错了什么。

非常感谢任何帮助

csvPath = "blahblah"

dfData = pd.DataFrame(['NTLogin', 'Date', '', 'FileName'])

for f in glob.glob(csvPath + "\*.csv"):
        df = pd.read_csv(f)
        filename = (os.path.basename(f))
        df.drop(df.columns[[0,1,3]], axis=1, inplace=True)
        df['ID'] = df['ID'].str.upper()
        df = df.set_index('ID').stack().reset_index()
        df['Filename'] = filename
        dfData = pd.concat([df, dfData], ignore_index=True)

它正在处理所有 CSV,在连接时您没有使用基础数据帧 (dfData),而只使用新数据帧 (df)。

同时考虑到Filename,每次都会被覆盖。 把它放在 df 以避免这种情况:

df['Filename'] = filename
dfData = pd.concat([dfData, df], ignore_index=True)

列表方法

正如 pyaj 在评论中所建议的,您也可以使用列表来实现相同的目的。

它看起来像这样:

csvPath = "blahblah"

df_list = []

for f in glob.glob(csvPath + "\*.csv"):
        df = pd.read_csv(f)
        filename = (os.path.basename(f))
        df.drop(df.columns[[0,1,3]], axis=1, inplace=True)
        df['ID'] = df['ID'].str.upper()
        df = df.set_index('ID').stack().reset_index()
        df['Filename'] = filename

        df_list.append(df)

dfData = pd.concat(df_list, ignore_index=True)

您还可以检查列表以查看每个数据帧是否正确。