【问题标题】:How to isolate part of string in pandas dataframe如何在熊猫数据框中隔离部分字符串
【发布时间】:2021-12-10 21:17:47
【问题描述】:

我有一个包含一列字符串的数据框。我想取出每一行中每个字符串的一部分,即年份,然后创建一个新列并将其分配给该列。我的问题是隔离字符串的最后一部分。一个例子可能是:'TON GFR 2018 N' 对于这个字符串,我可以通过运行以下之一来执行(为此我想隔离 18 而不是 2018)。

new_data['Year'] = pd.DataFrame([str(ele[1])[:2] for ele in list(new_data['Name'].str.split('20'))])

new_data['Year'] = new_data['Name'].str.split('20').str[1]
new_data['Year'] = new_data['Year'].str[:2]

但是,我也遇到类似这样的名称:“TON RO20 2018 N”或 TON 2020 N,然后它就不起作用了。我还在数据框中的不同行中遇到不同数量的空格,因此无法计算字符串中的空格数。

我的问题有什么聪明的解决方案吗?

【问题讨论】:

    标签: python pandas string split


    【解决方案1】:

    使用.str.extract()提取以20开头的4位字符串,得到最后2位,如下:

    new_data['Year'] = new_data['Name'].str.extract(r'20(\d\d)')
    

    如果要确保 4 位字符串不是较长字符串/数字的一部分,可以进一步使用正则表达式元字符 \b(字边界)将目标字符串括起来,如下所示:

    new_data['Year'] = new_data['Name'].str.extract(r'\b20(\d\d)\b')
    

    演示

    输入数据:

    print(new_data)
    
                  Name
    0   TON GFR 2018 N
    1  TON RO20 2018 N
    2       TON 2020 N
    

    结果:

    print(new_data)
    
                  Name Year
    0   TON GFR 2018 N   18
    1  TON RO20 2018 N   18
    2       TON 2020 N   20
    

    【讨论】:

    • 这非常有效。谢谢@SeaBean
    【解决方案2】:

    如果这与终点的距离始终相同,您可以使用:

    new_data["Year"] = new_data["Name"].str.slice(start=-4, stop=-2)
    

    【讨论】:

      猜你喜欢
      • 2017-09-09
      • 1970-01-01
      • 2017-07-08
      • 2019-02-12
      • 2022-01-20
      • 2014-07-09
      • 2021-12-28
      相关资源
      最近更新 更多