【问题标题】:a dataframe with several columns having the same column name, how to only keep the first and drop the rest?具有多个具有相同列名的列的数据框,如何只保留第一个并删除其余的?
【发布时间】:2020-12-29 18:35:36
【问题描述】:

我有一个包含这些列的 df:

Index(['Instrument', 'Date', 'Return on Invst Cap', 'Date',
       'Book Value Per Share, Total Equity', 'Date',
       'Earnings Per Share Reported - Actual', 'Date',
       'Revenue from Business Activities - Total', 'Date',
       'Free Cash Flow - Actual', 'Date', 'Total Long Term Debt', 'Date',
       'Profit/(Loss) - Starting Line - Cash Flow'],
      dtype='object')

有几列称为“日期”,其中一些列具有相同的值,有些则没有。

我只想保留第一个“日期”列并删除其余列。我认为一个重要的步骤是将第一个“日期”更改为不同的名称,例如“1 个日期”并删除另一个“日期”列

但我未能仅重命名此列。例如我尝试df_big5_simplified= df_big5.rename(columns={1: '1 Date'}) 尝试按列索引位置重命名

但是生成的df是完全一样的……

我也试过这种方法:

columns=pd.Index(['Date', 'Instrument', 'Return on Invst Cap',
       'Book Value Per Share, Total Equity',
       'Earnings Per Share Reported - Actual',
       'Revenue from Business Activities - Total', 'Free Cash Flow - Actual',
       'Total Long Term Debt', 'Profit/(Loss) - Starting Line - Cash Flow'], name='item')

df_big5_simplifed=df_big5.reindex(columns=columns)

然后我遇到了这个错误:

ValueError: cannot reindex from a duplicate axis

有什么想法吗?我可以有 50 个相同的列,并且只想保留第一个。

【问题讨论】:

  • 这能回答你的问题吗? python pandas remove duplicate columns
  • @ZarakiKenpachi 谢谢,我也想了解为什么我不能按索引重命名第二列...
  • 按位置重命名:df.rename(columns={ df.columns[2]: "keep_date" }, inplace = True)
  • @gtomer 谢谢,我试过你的代码,但它已经替换了每一列名为“日期”的列,这很奇怪,你知道为什么我的行 df_big5_simplified= df_big5.rename(columns={1: '1 Date '}) 不起作用?

标签: python pandas dataframe rename drop


【解决方案1】:

您可以设置所有列的名称:

df = df.set_axis(['Instrument', 'Date', 'Return on Invst Cap', 'Date2',
       'Book Value Per Share, Total Equity', 'Date3',
       'Earnings Per Share Reported - Actual', 'Date4',
       'Revenue from Business Activities - Total', 'Date5',
       'Free Cash Flow - Actual', 'Date6', 'Total Long Term Debt', 'Date7',
       'Profit/(Loss) - Starting Line - Cash Flow'], axis=1, inplace=False)

【讨论】:

  • 谢谢,但我希望避免手动操作,能够重命名第一个然后删除其他的会很棒
  • 按位置重命名:df.rename(columns={ df.columns[2]: "keep_date" }, inplace = True)
  • 谢谢,我试过你的代码,但它已经替换了每一列名为“日期”的列,这很奇怪,你知道为什么我的行 df_big5_simplified= df_big5.rename(columns={1: '1 Date'} ) 不起作用?
  • df.rename(columns={ df.columns[2]: "keep_date" }, inplace = True) - 这不起作用?
  • 正确,正如我所说,它已经取代了最初称为“日期”的每一列
猜你喜欢
  • 2021-09-29
  • 2012-11-26
  • 2013-12-08
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2019-11-18
相关资源
最近更新 更多