如何从Pandas的列中转移数值或非数值

时间:2018-10-22 06:48:28

标签: python-3.x pandas

在阅读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

1 个答案:

答案 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