首页 > 解决方案 > Python中多列的棘手字符串分离

问题描述

我有一个数据集 df,我想在其中分隔 Python 中的字符串。

数据

 Type                 Id        
 aa - generation      aa - generation01 
 aa_led - generation  aa_led - generation01
 ss - generation      ss- generation01  

期望的

Type    Id
aa      aa01
aa_led  aa_led01
ss      ss01

正在做

我正在尝试将此代码合并到我的脚本中,但是,我不断收到 NoneType 错误

df = df.applymap(lambda x : x.replace('- generation', '').replace(' ',''))

任何建议表示赞赏谢谢

标签: pythonpandasnumpy

解决方案


在 之前使用DataFrame.replacewith\s*表示零个或多个空格- generation

df = df.replace('\s*- generation', '', regex=True)
print (df)
     Type        Id
0      aa      aa01
1  aa_led  aa_led01
2      ss      ss01

错误意味着存在一些None值,因此对于您的解决方案,可以使用if-else以下语句:

df = pd.DataFrame([[ "aa - generation", "aa - generation01"],
                   ["aa_led - generation", "aa_led - generation01"],
                   ["ss - generation", None ]], 
                  columns=['Type', 'Id'])
print(df)
                  Type                     Id
0      aa - generation      aa - generation01
1  aa_led - generation  aa_led - generation01
2      ss - generation                   None

func = lambda x : x.replace('- generation', '').replace(' ','') if pd.notna(x) else None
df = df.applymap(func)
print (df)
     Type        Id
0      aa      aa01
1  aa_led  aa_led01
2      ss      None

推荐阅读