简体   繁体   中英

Python replace entire string if it begin with certain character in dataframe

I have data that contains 'None ...' string at random places. I am trying to replace a cell in the dataframe with empty character only when it begin with 'None ..'. Here is what I tried, but I get errors like '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

output looking for: (I need to replace entire value in cell if 'None ...' is starting string. Notice, 3rd row shouldn't be replaced because 'None ...' is not starting character)

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

You can use the below to identify the cells to replace and then assign them an empty value:

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
df['sub'] = df['sub'].str.replace('[\w\s]*?(None \.\.\.)[\s\w]*?','',1)

Out:

    sub
id  
1   
2   test
3   
4   probability
5   chemistry

Look at startswith , then after we find the row need to be replaced we using 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

You can simpy replace 'None ...' and by using a regular expression you can apply this replacement only for strings that start with None.

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

the output looks like this:

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

First, you are using the sub strings as index, that is why you received key error.

Second you can do this by: df['sub']=df['sub'].apply(lambda x: '' if x.find('None')==0 else x)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM