【问题标题】:How to create a new dataframe/CSV file from reading contents of files from various folders in python如何通过从 python 中的各种文件夹中读取文件内容来创建新的数据框/CSV 文件
【发布时间】:2020-08-18 10:23:37
【问题描述】:

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

文件夹 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

New-Dataframe 应该是

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

【问题讨论】:

  • 能否请您附上您迄今为止尝试过的内容?

标签: python python-3.x pandas csv directory


【解决方案1】:

假设 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 分隔符。

祝你好运

【讨论】:

    【解决方案2】:

    我相信您可以使用pd.concat() 来完成您要查找的内容。

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

    假设您的工作目录是所有文件夹(例如“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 字符串的使用;这些仅在您的 Python 版本为 3.6+ 时才有效。如果没有,您应该可以使用 .format() 方法或使用字符串添加替换此部分。

    【讨论】:

    • 谢谢,我收到错误 - FileNotFoundError: [Errno 2] 文件 .azurefunctions/Folder-1 不存在:'.azurefunctions/Folder-1
    • 第 11 行,csv_df = pd.read_csv(f"{folder_name}/{csv_file}")
    • 这是因为您的工作目录似乎不是文件夹所在的目录。代码将folder_name 读取为.azurefunctions,将csv_file 读取为Folder-1。在我看来,您所有的目标文件夹都在 .azurefunctions 目录中。将您的工作目录更改为此处,或将.azurefunctions 添加到os.listdir() 调用和read_csv 调用中。
    • 我改变了我的工作目录,仍然遇到错误 FileNotFoundError: [WinError 3] The system cannot find the path specified: 'folder_name'
    • 抱歉,您在使用它时遇到了问题。我可以看到 blondlg 的解决方案有所帮助,所以我会认为它已解决。
    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2020-12-08
    相关资源
    最近更新 更多