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

ver*_*sit 5 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
Run Code Online (Sandbox Code Playgroud)

我有一些DataFrames.我遍历每个DataFrame来处理它们.在循环结束时,我想将每个DataFrame保存为以DataFrame命名的.csv文件.我知道在Python中对变量的名称进行字符串化通常很困难,但我不得不认为我在这里遗漏了一些明显的东西.DataFrames没有"name"属性,所以我该怎么办?

EdC*_*ica 8

你可以只添加属性的DF一样,同样具有任何其他Python对象__dict__属性,并在以后使用它:

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
Run Code Online (Sandbox Code Playgroud)

更方便的是,为方便起见,您可以存储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
Run Code Online (Sandbox Code Playgroud)

编辑 正如@Jeff指出的那样,df上的大多数操作都不会保留属性,因为返回了df的副本,并且这些属性不会被复制,所以请注意这一点.

  • 注意:属性不会在操作中持续存在,因此如果您几乎执行任何操作,例如``df [df.A> 0]``,您将获得一个新帧. (5认同)