python - 使用 for 循环从列表创建数据框

标签 python pandas

这里是 Python/Pandas 初学者。我有一个名称列表,每个名称代表我计算机上的一个 csv 文件。我想为这些 csv 文件中的每一个创建一个单独的 pandas 数据框,并为数据框使用相同的名称。我可以通过为列表中的每个名称创建单独的代码行并在列表随时间变化时手动添加/删除这些代码行来以非常低效的方式执行此操作,当我有 3 个名称 Mark、Frank 和彼得:

path = 'C:\\Users\\Me\\Desktop\\Names'

Mark = pd.read_csv(path+"Mark.csv")
Frank = pd.read_csv(path+"Frank.csv")
Peter = pd.read_csv(path+"Peter.csv")

问题是我通常会有十几个名字,而且它们经常变化,所以这不是很有效。相反,我想我会保留一个名称列表以在需要时更新,并使用 for 循环来完成其余的工作:

path = 'C:\\Users\\Me\\Desktop\\Names'
names = ['Mark','Frank','Peter']

for name in names:
    name = pd.read_csv(path+name+'.csv')

这不会产生错误,但它不会创建 3 个不同的数据框 Mark、Frank 和 Peter,而是仅使用列表中第一个条目的数据创建一个数据框“名称”。如何让它工作,以便它为列表中的每个名称创建一个单独的数据框,并为每个数据框赋予与读取的 csv 文件相同的名称?

最佳答案

it creates a single dataframe 'name' using only the data from the first entry in the list.

它使用 last 条目,因为每次循环时,name 都会替换为下一个 read_csv 调用的结果。 (实际上,它被替换为列表中的一个值,然后 thenread_csv 结果替换;为避免混淆,您应该为循环变量使用单独的名称作为你的输出。特别是因为 name 作为调用你的结果没有任何意义 :) )

How do make this work

您有一个输入值列表,因此您还需要一个输出值列表。最简单的方法是使用列表理解,根据您开始使用的列表来描述您想要的列表:

csvs = [
    pd.read_csv(f'{path}{name}.csv')
    for name in names
]

它的工作方式与显式循环相同,除了它会根据每次计算的值自动构建一个列表。这意味着它所说的,按顺序:“csvs 是这些 pd.read_csv 结果的列表,为每个 计算一次 >name 值是 in names”。

关于python - 使用 for 循环从列表创建数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57843573/

相关文章:

python - 将多索引 Pandas 数据帧连接到另一个多索引数据帧

python - 如何从 pandas 数据框中选择相同的行以及 null

python - 二进制到字符串,比字典好?

python - 代码完成时发出声音警报

python - 如何检测时间序列中的翻转?

python - 将 mark_line 分层到交互式线图上会显着降低 Altair 的性能

Python 解码 "\u041b"字符串

python - 数据框列上的日期偏移量

python - 为什么我的 Pandas 数据框只显示一个数据集的结果?

python - 如何使用 pandas 添加重复的 csv 列