我有三个不同的Pandas
数据框
df_1
df_2
df_3
我想循环数据帧,进行一些计算,并使用数据帧的name
存储输出。换句话说,就像这样
for my_df in [df_1, df_2, df_3]:
my_df.reset_index(inplace=True)
my_df.to_csv('mypath/' + my_df +'.csv')
预期的输出文件:
'mypath/df_1.csv'
,'mypath/df_2.csv'
和'mypath/df_3.csv'
我正在努力这样做,因为df_1
是一个对象,而不是一个字符串。
任何想法如何做到这一点?
谢谢!
答案 0 :(得分:5)
另一个更通用的解决方案是使用列名创建dict
,然后按items()
循环:
d = {'df_1':df_1,'df_2':df_3, 'df_3':df_3}
for k, my_df in d.items():
my_df.reset_index(inplace=True)
my_df.to_csv('mypath/' + k +'.csv')
另一种可能的解决方案是使用另一个list
数据框名称,然后使用enumerate
并按位置获取name
的值:
names = ['a','b','c']
print ({names[i]: df for i, df in enumerate([df_1, df_2, df_3])})
答案 1 :(得分:1)
要使用to_csv方法将df存储为csv,我们需要一个字符串路径。
所以我们列举一下这个列表。这为for循环提供了2个变量。 第一个变量是循环迭代的索引。它就像一个柜台。
所以基本上enumerate
在循环中给了我们一个反对象。
我们正在使用计数器值来创建索引的字符串。 我们用它来创建一个唯一的文件名来存储。
for idx, my_df in enumerate([df_1, df_2, df_3]):
my_df.reset_index(inplace=True)
my_df.to_csv('mypath/df_' + str(idx + 1) +'.csv')