如何从python中的各个文件夹中读取文件内容来创建新的dataframe / CSV文件

问题描述

我有多个文件夹,其中包含带有值的CSV文件。我需要创建一个新的dataframe / CSV文件,其中每个文件和每个文件夹中每一列的内容都放置在此新dataframe中

文件夹1

A1.CSV

       A       B      C       D
       aa      bb     cc      dd

Folder-2

B1.CSV

        E      F       G       H
        ee     ff      gg      hh

文件夹3

C1.CSV

         I      J       K       L
         ii     jj      kk      ll

D1.CSV

          M       N       O       P
          mm      nn      oo      pp

新数据框应为

           A       B        C       D     E     F      H      I   O     P
           aa      bb       cc      dd    ee    ff     hh     ii  oo    pp 

解决方法

我相信您要找的东西可以通过pd.concat()完成。

您将不得不遍历每个文件夹中的每个文件,将单独的csv文件作为新的DataFrame加载,然后将其沿轴1(列)连接到其余数据帧。

假设您的工作目录是所有文件夹(例如“ Folder-1”,“ Folder-2”等)的存储位置,并且该目录中没有其他文件夹/文件,则可以使用以下代码: / p>

import os
import pandas as pd

# First creating your 'complete DataFrame' as an empty DataFrame.
complete_df = pd.DataFrame()

# Iterating through folders and files to find each csv:
for folder_name in os.listdir():
    for csv_file in os.listdir(folder_name):
        # Loading the individual csv as a pandas DataFrame
        csv_df = pd.read_csv(f"{folder_name}/{csv_file}")

        # If complete_df is empty,overwrite it with the first csv df.
        if len(complete_df) == 0:
            complete_df = csv_df
        # Otherwise,add the new csv df to the current complete df.
        else:
            complete_df = pd.concat([complete_df,csv_df],axis=1)

代码还假定每个文件夹中唯一的文件是csv文件。

对于它的价值,如果最终的DataFrame实际上只是一个 行和多列,我建议对其进行转置,以使其改为多行而只有一列-以这种格式存储csv文件效率更高。

注意: 我在上面的代码中插入了f字符串的用法;仅当您的Python版本为3.6+时,这些才有效。如果没有,则应该可以使用.format()方法或使用字符串添加功能来替换此部分。

,

这是我假设python脚本位于子文件夹的根目录下所做的事情:

import pandas as pd
import glob

# Initiate result DataFrame
result = pd.DataFrame()

# Loop over csv files in sub folders
for csv_file in glob.glob("*/*.csv"):
    
    # Concat each new DataFrame with the result
    result = pd.concat([result,pd.read_csv(csv_file,sep=',')],axis=1)
    
print(result)

支付csv分隔符的费用。

祝你好运