在数据框列Python中查找和删除子字符串

问题描述 投票:0回答:3

我想在包含以数字和符号开头的字符串作为唯一ID的列中查找所有行。确定它们后,我只想删除这些唯一行的前9个字符。到目前为止,我有:

if '.20_P' in df['ID']:
     df['ID']= df['ID']str.slice[: 9]

我希望它在哪里使用:

df['ID'] = 
2.2.2020_P18dhwys
2.1.2020_P18dh234
2.4.2020_P18dh229
P18dh209
P18dh219
2.5.2020_P18dh289

并将其切成这个:

df['ID'] = 
P18dhwys
P18dh234
P18dh229
P18dh209
P18dh219
P18dh289
python pandas dataframe substring slice
3个回答
0
投票

将条件行应用于同一列:

df['ID'] = df.appl(lambda row: row['ID'][:9] if '.20_P' in row['ID'] else row['ID'], axis=1)

0
投票

如果您知道要删除的字符串是带下划线的前缀,则可以这样做

 df['ID']= df['ID'].apply(lambda x: x.split('_')[-1])

0
投票

您还可以使用正则表达式查找子字符串。

这里的正则表达式的工作方式如下:查找由数字(())或(+)个非空格字符(\d)多次出现的[]组成的子字符串\w。可能在[*?)之前是数字和点[\d+\.]的组合,并带有下划线_。请注意,由于它是高度优化的(与.apply()相比),因此它也相当快。因此,如果您有很多数据,或者经常这样做,则可以考虑一下。

import pandas as pd

df = pd.DataFrame({'A': [
    '2.2.2020_P18dhwys',
    '2.1.2020_P18dh234',
    '2.4.2020_P18dh229',
    'P18dh209',
    'P18dh219',
    '2.5.2020_P18dh289',
]})

print(df['A'].str.extract(r'[\d+\.]*_?([\d\w]+)'))

输出:

          0
0  P18dhwys
1  P18dh234
2  P18dh229
3  P18dh209
4  P18dh219
5  P18dh289
© www.soinside.com 2019 - 2024. All rights reserved.