代码之家  ›  专栏  ›  技术社区  ›  Karn Kumar

如何从大熊猫的列中移动数值或非数值

  •  0
  • Karn Kumar  · 技术社区  · 6 年前

    在阅读pandas shift方法时,我只是做了一些测试,看看pandas数据框中的某个列是否具有数字和名称等混合值,我想将其分离,以便在将它们从原始列中删除/删除时将数字与单独的新列对齐。

    a) 以下是矿山数据框架:

    >>> df
            Name  OXA
    0    SAN 109  Yes
    1   KENI 122   No
    2  REEMA 455  Yes
    

    b) 我试着用shift将数字移动到一个新的数据帧( 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
    

    上面创建的新列为 纽斯 但没有得到预期的结果。

    c)我期望的输出为:

            Name  OXA      Nums
    0       SAN   Yes      109
    1       KENI  No       122
    2       REEMA Yes      455
    

    或者反之亦然

            Name  OXA     NUMS
    0       109  Yes      SAN
    1       122  No       KENI
    2       455  Yes      REEMA
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

    我相信你需要 extract 用于通过regex提取列- [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