首页 > 解决方案 > 如何在熊猫数据框中隔离部分字符串

问题描述

我有一个包含一列字符串的数据框。我想取出每一行中每个字符串的一部分,即年份,然后创建一个新列并将其分配给该列。我的问题是隔离字符串的最后一部分。一个例子可能是:'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,然后它就不起作用了。我还在数据框中的不同行中遇到不同数量的空格,因此无法计算字符串中的空格数。

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

标签: pythonpandasstringsplit

解决方案


用于.str.extract()提取以 开头的 4 位字符串20并获取最后 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

推荐阅读