In [37]: blue = pd.DataFrame({'A': ['foo','foo','foo','bar','bar'], 'B': [4.0, 4.0, 5.0, 8.0, 8.0]})
In [38]: blue
Out[38]:
A B
0 foo 4
1 foo 4
2 foo 5
3 bar 8
4 bar 8
In [39]: red = pd.DataFrame({'A': ['foo','foo','foo','bar','bar'], 'B': [np.nan, np.nan, np.nan, np.nan, np.nan]})
In [40]: red
Out[40]:
A B
0 foo NaN
1 foo NaN
2 foo NaN
3 bar NaN
4 bar NaN
In [41]: for df in [blue, red]:
....: df.to_csv(str(df))
....:
In [42]: !ls
A B?0 foo 4?1 foo 4?2 foo 5?3 bar 8?4 bar 8 A B?0 foo NaN?1 foo NaN?2 foo NaN?3 bar NaN?4 bar NaN postinstall.sh vagrant
我有一些DataFrame。我遍历每个DataFrame来处理它们。在循环结束时,我想将每个DataFrame保存为以DataFrame命名的.csv文件。我知道在Python中对变量的名称进行字符串化通常很困难,但我不得不认为我在这里遗漏了一些明显的东西。 DataFrames没有“name”属性,所以我该怎么办?
答案 0 :(得分:6)
您可以向df添加一个属性,与任何其他具有__dict__
attribute的python对象相同,并在以后使用它:
In [2]:
blue.name = 'blue'
red.name = 'red'
df_list = [blue, red]
for df in df_list:
print(df.name)
df.to_csv(df.name + '.csv')
blue
red
更好的是,为方便起见,您可以存储csv名称并稍后使用它:
In [5]:
blue.name = 'blue'
blue.csv_path = 'blue.csv'
red.name = 'red'
red.csv_path = 'red.csv'
df_list = [blue, red]
for df in df_list:
print(df.name)
print(df.csv_path)
df.to_csv(df.csv_path)
blue
blue.csv
red
red.csv
修改强> 正如@Jeff指出的那样,df上的大多数操作都不会保留这些属性,因为会返回df的副本,并且不会复制这些属性,所以请注意这一点。