gpt4 book ai didi

python - 从操作系统创建 Pandas 数据框

转载 作者:行者123 更新时间:2023-12-01 03:13:44 25 4
gpt4 key购买 nike

我正在尝试从 os.walk() 创建数据框。这是我的文件夹结构的示例。

Top Folder1
---File1

Top Folder2
---File2
---File3
---File4

我想制作一个像这样的 DataFrame:

   Path          File_Name
0 Folder1_Path File1
1 Folder2_Path File2
2 Folder2_Path File3
3 Folder2_Path File4

我可以获得文件夹的路径和文件名,但我找不到将它们组合到数据框中的方法。我尝试过将 concatappend 放入空的 DataFrame 中,但没有成功,甚至尝试创建多个 Series 并将它们放入单个 DataFrame 中。

import pandas as pd 
import os
import os.path

for root,dirs,files in os.walk('Y:\\', topdown=True):
if len(files) > 0:
print(root) #Gets the Folder Path
print("---", files) #Creates a List of the files

如何获取 DataFrame 的一列中的 root 和另一列中的 files

最佳答案

我会做这样的事情:

import os
import pandas as pd

res = []
for root, dirs, files in os.walk('Y:\\', topdown=True):
if len(files) > 0:
res.extend(list(zip([root]*len(files), files)))

df = pd.DataFrame(res, columns=['Path', 'File_Name']).set_index('Path')

编辑:实际上我认为你不需要zip中的list()。两者都应该工作 res.extend(zip([root]*len(files), files))

说明:

DataFrame 类可以接收多种类型的输入。一个容易理解的例子是元组的列表

每个元组的长度将是最终 DataFrame 的列数。另外,当涉及循环时,附加/扩展列表非常高效。

示例:

tuple1 = (1, 2)
tuple2 = (110, 230)
all_list = [tuple1, tuple2]
pd.DataFrame(all_list)
Out[4]:
0 1
0 1 2
1 110 230

您可以根据需要附加到该格式:

for i in range(100):
all_list.append((i, i))

pd.DataFrame(all_list)
Out[19]:
0 1
0 1 2
1 110 230
2 0 0
3 1 1
4 2 2
5 3 3
...

由于您知道要传递长度为 2 的元组,因此可以传递列名称:

pd.DataFrame(all_list, columns=['path', 'file']).head()
Out[21]:
path file
0 1 2
1 110 230
2 0 0
3 1 1
4 2 2

在您给我们的示例中,根的长度始终为 1,文件可以是任何大小。使用 zip,我为根中的每个文件创建长度为 2(根、文件)的元组。由于您不知道每个根有多少个文件,因此可以使用 [root]*len(files) 调整根的长度以匹配文件的长度

list(zip(["a"]*len(tuple1), tuple1))
Out[6]:
[('a', 1), ('a', 2)]

将其扩展到结果列表只需将元组添加到结果列表中。

关于python - 从操作系统创建 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42654961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com