【问题标题】:Read multiple files in python and combine filenames and content into a dataframe在 python 中读取多个文件并将文件名和内容组合到一个数据框中
【发布时间】:2020-12-26 11:28:31
【问题描述】:

我在python中通过读取文件创建了以下列表

files_list = ["A", "B", "C", "D"]

文件内容为字符向量如下

A = ["A1"]
B = ["A2", "B1"]
C = ["A3", "B3", "C3", "C3"]
D = []

我想创建以下数据框

Col1   Col2
A      A1
B      A2, B1
C      A3, B3, C3
D     

文件名应呈现为一列,第二列应包含文件内容为单行。

我使用 for 循环尝试了以下代码。请注意,这是一个玩具数据集,我的数据集有点大

import pandas as pd


df3 = pd.DataFrame()
for i in list_name:
    for j in i:
        df3["Col1"] = j
        df3["Col2"] = i

我如何使用 for 循环完成相同的操作 我请人看看。我生成的df3对象是空的

【问题讨论】:

标签: python pandas dataframe nested-loops


【解决方案1】:
import pandas as pd


files_list = ["A", "B", "C", "D"]
files_cont = [
    ["A1"],
    ["A2", "B1"],
    ["A3", "B3", "C3", "C3"],
    [],
]

df3 = pd.DataFrame({"contents": list(map(sorted, map(set, files_cont)))}, index=files_list)
print(df3)
       contents
A          [A1]
B      [A2, B1]
C  [A3, B3, C3]
D            []

我们使用 dict 创建一个新的pd.DataFrame,以便将键用于列名(我使用了"contents",但选择您喜欢的任何内容)并提供index 关键字参数来指定行。

由于问题删除了列表中的重复项,因此每个内容列表首先传递给set 函数以消除重复元素,然后传递给sorted 函数以获取具有排序元素的列表。如果您不需要,请改用{"contents": files_cont}

【讨论】:

    【解决方案2】:

    假设您的文件是 CSV,您可以执行以下操作来使用 for 循环:

    import glob
    import pandas as pd
    directory = "C:/your/path/to/all/files/*.csv"
    df3 = pd.DataFrame(columns=["col", "contents"])
    
    for file in glob.glob(directory):
            col = file.split(sep="\\")[1].split(".")[0]
            try:
                temp = pd.read_csv(file, header=None).values.flatten()
                df3 = df3.append({"col": col, "contents": temp}, ignore_index=True)
            except:
                df3 = df3.append({"col": col, "contents": None}, ignore_index=True)
    

    你得到以下数据帧:

        col contents
    0   A   [A1]
    1   B   [A2, B1]
    2   C   [A3, B3, C3]
    3   D   None
    

    【讨论】:

      猜你喜欢
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多