【问题标题】:How to Split the Contents of a Single Pandas Dataframe Column into Multiple New Columns如何将单个 Pandas 数据框列的内容拆分为多个新列
【发布时间】:2020-07-23 19:54:29
【问题描述】:

假设我有两个运动队的记录数据。

d = {'Team': [1, 2], 'Record': ['5-0', '3-2']}
df = pd.DataFrame(data=d)
df

    Team    Record
0     1      5-0
1     2      3-2

我想将记录拆分并附加到每个团队的新列中,如下所示:

d = {'Team': [1, 2], 'Record': ['5-0', '3-2'], 'Wins': [5, 3], 'Losses' : [0, 2]}
df = pd.DataFrame(data=d)
df


  Team  Record  Wins    Losses
0   1    5-0     5         0
1   2    3-2     3         2

由于连字符,Records 列中的数据是一个对象。

(df.dtypes)

Team       int64
Record    object
dtype: object

我该怎么做呢?会是某种正则表达式,然后是列表理解来遍历 Record 列的每一行吗?我想在一个数据框中为大约 400 个团队执行此操作。提前感谢您的帮助。

【问题讨论】:

    标签: python regex pandas dataframe list-comprehension


    【解决方案1】:

    如果数据表现良好,您可以将Series.str.extract 与命名捕获组(Number)-(Number) 一起使用。然后连接回来。

    pd.concat([df, df['Record'].str.extract(r'(?P<Wins>\d)-(?P<Losses>\d)')], axis=1)
    #   Team Record Wins Losses
    #0     1    5-0    5      0
    #1     2    3-2    3      2
    

    【讨论】:

    • 哇,我不知道这个功能:提取+捕获组命名。很高兴知道:)
    【解决方案2】:

    使用 pandas 字符串方法,特别是 str splitstr get,以及 assign 提取到新列:

        df = (df
             .assign(Wins= df.Record.str.split('-').str.get(0),
                     Losses = df.Record.str.split('-').str.get(-1)
                )
              )
    
    df
    
    
      Team  Record  Wins    Losses
    0   1    5-0     5         0
    1   2    3-2     3         2
    

    【讨论】:

      猜你喜欢
      • 2016-10-13
      • 2022-08-12
      • 2021-08-07
      • 1970-01-01
      • 2021-03-27
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      相关资源
      最近更新 更多