读取 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
我在 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