繁体   English   中英

如何通过读取 python 中各个文件夹的文件内容来创建新的数据框/CSV 文件

[英]How to create a new dataframe/CSV file from reading contents of files from various folders in python

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

文件夹-1

A1.CSV

       A       B      C       D
       aa      bb     cc      dd

文件夹-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(列)的数据帧的 rest。

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

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-strings 的使用; 这些仅在您的 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 分隔符。

祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM