【问题标题】:Pandas: extract first 4 digits from column headersPandas:从列标题中提取前 4 位数字
【发布时间】:2021-07-24 07:09:41
【问题描述】:

我有一个带有 +1000 列的 pandas 数据框。我只想从所有标题中提取前 4 位数字。

原始数据示例:

Q001-XYZ Q002-XYZ
First row
Second row

我想得到:

Q001 Q002
First row
Second row

我试过 df.head() = df.head().str[:4] 但我得到错误 SyntaxError: can't assign to function call

有什么建议吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    列表推导是最快的选择:

    df.columns = [col[:4] for col in df.columns]
    

    【讨论】:

      【解决方案2】:

      通过columns 属性或rename() 方法尝试:

      df.columns=df.columns.str.split('-').str[0]
      #OR
      df=df.rename(columns=lambda x:x.split('-')[0])
      

      df.columns=df.columns.str[:4]
      #OR
      df=df.rename(columns=lambda x:x[:4])
      

      【讨论】:

      • 列表理解实际上是最快的:df.columns = [col[:4] for col in df.columns]
      • @tdy 是的,先生,您是对的,因为拆分需要时间列表理解也是一种方式,但df.columns.str[:4][col[:4] for col in df.columns] 做同样的事情
      • 我同意他们遵循相同的概念,但在实践中理解速度更快。我继续前进,posted it as an answer 有一个时序图。
      • @tdy 太好了..你的答案被选中了;)如果你有时间,你可以检查一下这个的性能list(map(lambda x:x[:4],df.columns))
      • 它非常快,但比理解@AnuragDabas 稍慢。刚刚用这个 map 和 Pygirl 的 .str.extract 更新了剧情
      【解决方案3】:

      尝试使用regex:

      df.columns = df.columns.str.extract('([\w]+)-', expand=False)
      

      【讨论】:

        【解决方案4】:

        你可以试试:

        df.columns.str[:4].to_list()
        

        【讨论】:

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