这里是 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
调用的结果。 (实际上,它被替换为列表中的一个值,然后 then 被 read_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/