如果Python以数据帧中的某些字符开头,则替换整个字符串

时间:2019-03-15 17:35:09

标签: python python-3.x pandas

我有随机位置包含“ None ...”字符串的数据。我试图只在以'None ..'开头时用空字符替换数据框中的单元格。这是我尝试过的方法,但出现诸如“ KeyError”之类的错误。

df = pd.DataFrame({'id': [1,2,3,4,5], 
                   'sub': ['None ... ','None ... test','math None ...','probability','chemistry']})


df.loc[df['sub'].str.replace('None ...','',1), 'sub'] = '' # getting key error

输出寻找:(如果'None ...'是起始字符串,我需要替换单元格中的整个值。注意,不应替换第三行,因为'None ...'不是起始字符)

id  sub
1   
2   
3   math None ...
4   probability
5   chemistry

5 个答案:

答案 0 :(得分:1)

您可以使用以下内容标识要替换的单元格,然后为它们分配一个空值:

df.loc[df['sub'].str.startswith("None"), 'sub'] = ""

df.head()

   id            sub
0   1
1   2
2   3  math None ...
3   4    probability
4   5      chemistry

答案 1 :(得分:0)

df['sub'] = df['sub'].str.replace('[\w\s]*?(None \.\.\.)[\s\w]*?','',1)

出局:

    sub
id  
1   
2   test
3   
4   probability
5   chemistry

答案 2 :(得分:0)

查看startswith,然后在发现需要替换的行后,我们使用replace

df['sub']=df['sub'].mask(df['sub'].str.startswith('None ... '),'')
df
Out[338]: 
   id            sub
0   1               
1   2               
2   3  math None ...
3   4    probability
4   5      chemistry

答案 3 :(得分:0)

您可以简单地替换“ None ...”,并通过使用正则表达式可以仅对以None开头的字符串应用此替换。

df['sub'] = df['sub'].str.replace(r'^None \.\.\.*','',1)

输出看起来像这样:

   id            sub
0   1               
1   2           test
2   3  math None ...
3   4    probability
4   5      chemistry

答案 4 :(得分:0)

首先,您将子字符串用作索引,这就是为什么您收到键错误的原因。

第二,您可以通过以下方式做到这一点: df ['sub'] = df ['sub']。apply(lambda x:``如果x.find('None')== 0 else x)