【问题标题】:How to change the columns name from a tuple to string?如何将列名从元组更改为字符串?
【发布时间】:2017-06-22 23:00:17
【问题描述】:

我在 pandas 数据框中使用了pd.pivot_table,列名变成了像('A1', 'B1'), ('A1', 'B2')... 这样的元组,我希望它们像'A1_B1', 'A1_B2'...

我尝试使用 df.columns.values[i] = df.columns.values[i][0] + '_' + df6.columns.values[i][1], 并尝试重命名。

当我检查 df.columns.values 时,列的名称发生了变化,但是当我无法使用这些名称进行索引时。我是 python 新手,所以可能不知道列名和列索引之间的区别。

谁能帮帮我?谢谢!

【问题讨论】:

  • 您是遇到错误还是什么都没做?

标签: python pandas


【解决方案1】:

设置

df = pd.DataFrame(
    np.arange(8).reshape(2, 4),
    columns=[('A1', 'B1'), ('A2', 'B1'), ('A1', 'B2'), ('A2', 'B2')])

print(df)

   (A1, B1)  (A2, B1)  (A1, B2)  (A2, B2)
0         0         1         2         3
1         4         5         6         7

rename

df.rename(columns='_'.join, inplace=True)
print(df)

   A1_B1  A2_B1  A1_B2  A2_B2
0      0      1      2      3
1      4      5      6      7

map

df.columns = df.columns.map('_'.join)
print(df)

   A1_B1  A2_B1  A1_B2  A2_B2
0      0      1      2      3
1      4      5      6      7

【讨论】:

  • 嗨 - 如果元组的一个元素是 int,我们如何使用上面的 df.rename() 方法将其转换为 str?
  • 而不是''.join。使用 lambda tup:''.join(map(str, tup))
【解决方案2】:

使用list comprehension:

df.columns = ['{}_{}'.format(x[0], x[1]) for x in df.columns]
print(df)
   A1_B1  A2_B1  A1_B2  A2_B2
0      0      1      2      3
1      4      5      6      7

或者:

df.columns = ['_'.join(x) for x in df.columns]
print(df)
   A1_B1  A2_B1  A1_B2  A2_B2
0      0      1      2      3
1      4      5      6      7

【讨论】:

    【解决方案3】:

    您可以为此使用df.DataFrame.Index.map

    df1.columns.map(lambda t: t[0] + "_" + t[1])
    

    【讨论】:

      【解决方案4】:

      您可能需要迭代。

      final=[]
      for x in df.columns.values:
          final.append(x[0]+'_'+x[1])
      df.columns.values = final
      

      【讨论】:

        【解决方案5】:

        我使用了这种方法:

        mydic = dict() 
        for i,var in enumerate(df.columns):
            if isinstance(var, tuple): 
                mydic[var] = '{}_{}'.format(var[0], var[1])
        df.rename(columns = mydic) 
        

        这使我还可以通过四舍五入并指定一个整数来处理我的元组中的第二个输入是一个整数,该整数已经变成了一个浮点数(并附加了一个烦人的“.0”小数)

        mydic[var] = '{}_{:d}'.format(var[0], round(var[1]))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-24
          • 2010-12-18
          • 2021-10-20
          • 2012-05-09
          • 1970-01-01
          • 2021-02-27
          相关资源
          最近更新 更多