【问题标题】:Python: Custom function that dynamically names dataframe based on variable namePython:根据变量名称动态命名数据框的自定义函数
【发布时间】:2018-12-19 14:32:18
【问题描述】:

我想创建与变量名称同名的数据框。我创建了以下函数:

def path_to_df(path):
   filename=str(path).split('/')[-1]
   allFiles = glob.glob(path + "/*.csv.gz")
   list_=[]
   for file_ in allFiles:
       df = pd.read_csv(file_,index_col=None, header=0)
       list_.append(df)
   frame = pd.concat(list_, axis = 0, ignore_index = True)
   frame.columns = [str(filename)+ '_' +str(col) for col in frame.columns]
   exec('{}_df=frame'.format(filename))
   print('Completed:  {}_df'.format(filename))

该功能的每个步骤都有效,除了以下步骤:

 exec('{}_df=frame'.format(filename))

我运行代码时没有错误。该函数返回“帧”,但不返回自定义数据帧(即 {}_df)

【问题讨论】:

  • 你忘了写什么错误
  • @Bazingaa 谢谢。我已经更新了问题。

标签: python function dataframe return exec


【解决方案1】:

我不确定您为什么不想为此只使用字典,但为了回答问题,您可以修改当前模块以使用 syssetattr 设置这些变量所以

import sys

# Now instead of exec'ing
setattr(sys.modules[__name__], '{}_df'.format(filename), frame)

不过,您几乎肯定想使用dict。看到这个问题:How can you dynamically create variables via a while loop?

【讨论】:

  • 这行得通!谢谢。将在 4 分钟内单击绿色勾号。 :D 为什么建议您使用字典而不是当前答案?
  • 阅读我分享的链接。这正是词典应运而生的情况。此外,模块中的变量实际上只是存储在模块内的字典中(这是一种简化,但现在已经足够了)所以你实际上只是想出了一个更复杂的策略来使用你没有的字典声明。
猜你喜欢
  • 1970-01-01
  • 2022-07-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 2013-11-16
  • 1970-01-01
  • 2012-10-22
  • 2013-01-02
相关资源
最近更新 更多