pandas:从另一列修改数据帧中的值



在将数据拆分为列时,出现了一些小故障,因此我得到了一些嘈杂的数据。

site          code
---           ---
0   apple_123     45
1   apple_456     xy_33
2   facebook_123  24
3   google_123    NaN
4   google_123    pq_51

我需要清理数据,这样我得到以下结果:

site            code
---             ---
0   apple_123       45
1   apple_456_xy    33
2   facebook_123    24
3   google_123      NaN
4   google_123_pq   51

我已经能够获得需要修改的行,但无法进一步进行:

import numpy as np
import pandas as pd
site = ['apple_123','apple_456','facebook_123','google_123','google_123']
code = [45,'xy_33',24,np.nan,'pq_51']
df = pd.DataFrame(list(zip(site,code)), columns=['site','code'])
df[(~df.code.astype(str).str.isdigit())&(~df.code.isna())] 

使用Series.str.extract将非数值和数值获取到辅助DataFrame,然后分别处理每一列-通过Series.str.strip删除_,通过Series.radd从右侧添加并将丢失的值转换为emty字符串,最后添加到code列,第二次使用Series.fillna将未处理的值从1列替换为原始值:

df1 = df.code.str.extract('(D+)(d+)')
df['site'] += df1[0].str.strip('_').radd('_').fillna('')
df['code'] = df1[1].fillna(df['code'])
print (df)
site code
0      apple_123   45
1   apple_456_xy   33
2   facebook_123   24
3     google_123  NaN
4  google_123_pq   51

最新更新