读取 python 中的多个文件并将文件名和内容合并到一个数据框中

Read multiple files in python and combine filenames and content into a dataframe

我在 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 对象是空的

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} 即可。

假设您的文件是 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