Python:如何在将数据名称用作字符串时迭代数据帧?

时间:2016-12-22 16:08:06

标签: python pandas

我有三个不同的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是一个对象,而不是一个字符串。 任何想法如何做到这一点?

谢谢!

2 个答案:

答案 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')