【问题标题】:Renaming columns of dataframe list in Pandas在 Pandas 中重命名数据框列表的列
【发布时间】:2014-10-26 04:10:49
【问题描述】:

我有一个包含很多数据框的列表

col = ['open', 'high', 'low', 'close']
index = [1, 2, 3, 4]

df1 = pd.DataFrame(columns=col, index=index)
df2 = pd.DataFrame(columns=col, index=index)
df3 = pd.DataFrame(columns=col, index=index)

dflist = [df1, df2, df3]

我需要重命名列表中所有数据框的所有列。我需要将每个数据框的名称添加到每列的名称中。我试着用 for 循环来做。

for key in dflist:
    key.rename(columns=lambda x: key+x)

显然,这是行不通的。期望的输出是:

In  [1]: df1.columns.tolist()
Out [2]: ['df1open', 'df1high', 'df1low', 'df1close']

In  [3]: df2.columns.tolist()
Out [4]: ['df2open', 'df2high', 'df2low', 'df2close']

In  [5]: df3.columns.tolist()
Out [6]: ['df3open', 'df3high', 'df3low', 'df3close']

感谢您的帮助。

【问题讨论】:

    标签: python for-loop pandas rename dataframe


    【解决方案1】:

    如果您需要以某种方式访问​​它们的“名称”并以编程方式操作它们(想想当你有成千上万个它们时),你想使用字典而不是列表来存储数据帧。还要注意 inplace 参数的使用,这在 pandas 中很常见:

    import pandas as pd
    
    col = ['open', 'high', 'low', 'close']
    index = [1, 2, 3, 4]
    
    df_all = {'df1': pd.DataFrame(columns=col, index=index),
              'df2': pd.DataFrame(columns=col, index=index), 
              'df3': pd.DataFrame(columns=col, index=index)}
    
    for key, df in df_all.iteritems():
        df.rename(columns=lambda x: key+x, inplace=True)
    
    print df_all['df1'].columns.tolist()
    

    输出:

    ['df1open', 'df1high', 'df1low', 'df1close']
    

    【讨论】:

      【解决方案2】:

      这里有几个问题。首先,dflist 是 DataFrames 的列表,而不是那些 DataFrames 的 names。所以df1"df1"不一样,也就是说key + x不是字符串拼接。

      其次,rename() 函数返回一个新的 DataFrame。所以你必须传递inplace=True 参数来覆盖现有的列名。

      试试这个:

      dflist = ['df1', 'df2', 'df3']
      for key in dflist:
          df = eval(key)
          df.rename(columns=lambda x: key+x, inplace=True)
      

      【讨论】:

      • 非常感谢您的解释。
      猜你喜欢
      • 2021-09-03
      • 2017-12-28
      • 1970-01-01
      • 2012-08-25
      • 2019-09-26
      • 2020-07-07
      • 2017-12-31
      • 2018-12-26
      • 1970-01-01
      相关资源
      最近更新 更多