简体   繁体   中英

Split Columns in pandas with str.split and keep values

So I am stuck with a problem here:

I have a pandas dataframe which looks like the following:

ID Name    Value
0  Peter   21,2
1  Frank   24
2  Tom     23,21/23,60 
3  Ismael  21,2/ 21,54
4  Joe     23,1

and so on...

What I am trying to is to split the "Value" column by the slash forward (/) but keep all the values, which do not have this kind of pattern.

Like here:

ID Name    Value
0  Peter   21,2
1  Frank   24
2  Tom     23,21
3  Ismael  21,2
4  Joe     23,1

How can I achieve this? I tried the str.split method but it's not giving me the solution I want. Instead, it returns NaN as can be seen in the following.

My Code: df['Value']=df['value'].str.split('/', expand=True)[0]

Returns:

ID Name    Value
0  Peter   NaN
1  Frank   NaN
2  Tom     23,21
3  Ismael  21,2
4  Joe     Nan

All I need is the very first Value before the '/' is coming.

Appreciate any kind of help!

Remove expand=True for return lists and add str[0] for select first value:

df['Value'] = df['Value'].str.split('/').str[0]
print (df)
   ID    Name  Value
0   0   Peter   21,2
1   1   Frank     24
2   2     Tom  23,21
3   3  Ismael   21,2
4   4     Joe   23,1

If performance is important use list comprehension:

df['Value'] = [x.split('/')[0] for x in df['Value']]

pandas.Series.str.replace with regex

df.assign(Value=df.Value.str.replace('/.*', ''))

   ID    Name  Value
0   0   Peter   21,2
1   1   Frank     24
2   2     Tom  23,21
3   3  Ismael   21,2
4   4     Joe   23,1

Optionally, you can assign results directly back to dataframe

df['Value'] = df.Value.str.replace('/.*', '')

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