在Pandas中将DataFrame名称保存为.csv文件名

时间:2014-08-15 19:37:59

标签: python pandas

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”属性,所以我该怎么办?

1 个答案:

答案 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的副本,并且不会复制这些属性,所以请注意这一点。