【问题标题】:How to convert string to a dataframe name pandas/python如何将字符串转换为数据框名称 pandas/python
【发布时间】:2018-10-17 18:55:51
【问题描述】:

我有 2 个数据框(dfA、dfB)

我有另一个数据框 dfC,它有一个名为“SOURCE”的列。 SOURCE 的值为 dfA 或 dfB。

我正在尝试逐行查看 dfC,并根据 SOURCE 字段更新 dfA 或 dfB。

为此,我尝试创建一个变量“a”,该变量将采用 SOURCE 的值。问题是,'a 将等于 'dfA' 或 'dfB'(将其读取为字符串)。我无法使用此字符串调用正确的数据帧(抛出错误)

for i in [0, len(dfC.index)-1]:
    a = dfC.loc[i,'Source']
    temp = a[['colA', 'colB', colC']]][(a['movement_id']) == dfC.loc[i,'TEMP']]

【问题讨论】:

  • 您可以发布您的数据框以便我们查看列和示例数据吗?使用 df.head()
  • 与其将 DF 作为字符串传递,为什么不直接传递变量本身呢? 'dfA', 'dfB'dfA, dfB
  • 目标不是硬编码,因为 dfC 会不断增长。有没有办法可以将字符串转换为变量名?这样就可以解决问题了
  • 您可以使用locals(),但请记住,这通常是糟糕设计的标志。

标签: python pandas numpy


【解决方案1】:

只需在循环中使用 if-else;

for ind in range(dfC.shape[0]):
   if dfC.loc[ind, 'SOURCE'] == 'dfA':
       "do what you want to dfA"
   if dfC.loc[ind, 'SOURCE'] == 'dfB':
           "do what you want to dfB"

这听起来合理吗?

【讨论】:

    【解决方案2】:

    我建议使用 pandas.DataFrame.update 来根据索引更新数据帧。

    dfa = DataFrame([[2],[4]], index=[1,2], columns=['val'])
    dfb = DataFrame([[4],[8]], index=[1,2], columns=['val'])
    dfc = DataFrame([['dfa',-1],['dfb',-2],['dfa',-3]], index=[1,1,2], columns='dest','val'])
    
    dfa.update(dfc[dfc['dest']=='dfa'])
    dfb.update(dfc[dfc['dest']=='dfb'])
    

    通常不鼓励在 pandas 中使用 for 循环。

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 2018-09-12
      相关资源
      最近更新 更多