在阅读Pandas shift方法时,我只是在做一些测试,看看Pandas dataFrame中的Column是否具有数字和名称之类的混合值,并且我想将其分开,以便将数字对齐到单独的位置新列,同时从原始列中删除/删除它们。
a)下面是我的DataFrame:
>>> df
Name OXA
0 SAN 109 Yes
1 KENI 122 No
2 REEMA 455 Yes
b)我尝试过将数字移动到新的DataFrame(Nums
):
>>> df['Nums'] = df['Name'].shift(-1)
>>> df
Name OXA Nums
0 SAN 109 Yes KENI 122
1 KENI 122 No REEMA 455
2 REEMA 455 Yes NaN
以上方法将“新建”列创建为Nums
,但未获得所需的结果。
c)我期望的输出将是:
Name OXA Nums
0 SAN Yes 109
1 KENI No 122
2 REEMA Yes 455
OR,反之亦然
Name OXA NUMS
0 109 Yes SAN
1 122 No KENI
2 455 Yes REEMA
答案 0 :(得分:1)
我相信您需要extract
来按正则表达式提取列-[a-zA-Z]+
匹配一个或多个字符,然后\s*
匹配零个或多个空格,\d+
匹配一个或多个字符更多数字:
df[['Name','Nums']] = df['Name'].str.extract('([a-zA-Z]+)\s*(\d+)')
print (df)
Name OXA Nums
0 SAN Yes 109
1 KENI No 122
2 REEMA Yes 455
df[['NUMS','Name']] = df['Name'].str.extract('([a-zA-Z]+)\s*(\d+)')
print (df)
Name OXA NUMS
0 109 Yes SAN
1 122 No KENI
2 455 Yes REEMA
如果总是有空格分隔符,请使用split
:
df[['Name','Nums']] = df['Name'].str.split(expand=True)
print (df)
Name OXA Nums
0 SAN Yes 109
1 KENI No 122
2 REEMA Yes 455