获取数据框名称并以相同名称保存文件的优雅方式

Elegant way to fetch the dataframe name and save the file with same name

我有两个数据帧 test1test2。我的程序逻辑如下

def write_file():
   test1.to_csv(('test1.csv'),index=None)

def process_file():
    test2= pd.read_csv('test1.csv',low_memory=False)

def write_processed_file():
   test2.to_csv(('test2.csv'),index=None)

我像下面这样调用上面的所有函数

write_file()
process_file()
write_processed_file()

如您所见,我有两个 write 函数来编写数据帧,因为我希望两个数据帧的 .csv 文件名不同。如果我按照下面的 input argument 方法只有一个写函数,那么我只能有一个通用文件名。我们如何获得 datframe 名称?

def write_file(df_name):
   df_name.to_csv(('common_file_name.csv'),index=None)

我希望我的输出 有两个名为 test1.csvtest2.csv 的 csv 文件,但没有两个写入函数

基本上我有 400-500 行代码,其中有 15-18 行代码将数据帧写入 csv 文件。我想要一个写入函数,它接受数据帧作为输入并将数据帧的名称提供为 csv 文件名。

有没有办法以优雅高效的方式获取数据框名称并以相同的名称保存文件?

在代码中使用变量名被认为是不好的风格。虽然在 Python 中是可能的,但我建议只传递两个参数:

def write_file(df, filename):
    df.to_csv(filename, index=None)

您可以在您的代码中使用它作为

write_file(test1, 'test1.csv')
write_file(test2, 'test2.csv')

现在,如果您有许多数据帧都遵循上述可预测的命名模式怎么办?在这种情况下,最好使用列表来保存数据帧。

test = [test1, test2, test3, ..., test100]

然后您可以索引到这个列表,循环写入文件

for i, df in enumerate(test, 1):
    write_file(df, f'test{i}.csv')

但是如果您有很多数据框并且名称不是可预测的数字模式怎么办?那我宁愿用字典:

dfs = {'test1': test1, 
       'test2': test2,
       'other_df': other_df,
       'inline_df': process_df()  # you can store them straight from a function
       }

for name, df in dfs.items():
    write_file(df, f'{name}.csv')