【问题标题】:How to breaking up a string into columns in pandas?如何在熊猫中将字符串分解为列?
【发布时间】:2017-09-05 22:46:04
【问题描述】:

我有一个非常相似的熊猫数据框(实际上更大),有两列:

ID       |STRING_COL
ID2309480|#0809890 ^ True ^ ReP  ^ APPLE
ID2398403|#0938409 ^ True ^ POST ^ GOOGLE
ID0398240|#0938402 ^ True ^ POST ^ VERIZON

如何将STRING_COL 拆分为:

ID       |NUMBER   | VALUE| Accepted| COMPANY
---------------------------------------------
ID2309480|#0809890 | True | ReP     | APPLE
ID2398403|#0938409 | True | POST    | GOOGLE
ID0398240|#0938402 | True | POST    | VERIZON

在阅读了tutorial 和该网站的其他一些问题后,我尝试将它们拆分为:

df = pd.DataFrame(df.STRING_COL.str.split('^',1).tolist(), columns = ['ID','NUMBER', 'VALUES', 'ACCEPTED', 'COMPANY'])
df

但显然这是错误的,因为它返回了以下回溯:

AttributeError: 'function' object has no attribute 'str'

那么,如何将STRING_COL 拆分为以^ 为分隔符的其他块?

更新

我也试过这个:

df['STRING_COL'].str.split('^', 1, expand=True)

但我不明白如何添加其他列..

【问题讨论】:

    标签: python string python-3.x pandas data-manipulation


    【解决方案1】:

    这应该会给你你想要的df3。我使用 pd.concat 方法将正确的列附加到单个 df 中。

    # Using your second method to split the second column (slight variation)
    df2 = df['STRING_COL'].str.split('^', expand=True)
    
    # Concatenate the proper columns into a single df
    df3 = pd.concat([df[['ID']], df2], axis=1)
    
    # Rename the columns and turn the VALUE column into type bool 
    df3.columns = ['ID', 'NUMBER', 'VALUE', 'Accepted', 'COMPANY']
    df3.VALUE = df3.VALUE.astype(bool)
    

    【讨论】:

      【解决方案2】:

      您的第二种方法是在正确的轨道上 - 从那里迭代并分配列 - 像这样:

      names = ['NUMBER', 'VALUE', 'Accepted', 'Company']
      
      new_cols = df['STRING_COL'].str.split('^', expand=True)
      
      for i, name in enumerate(names):
          df[name] = new_cols[i]
      
      df
      Out[43]: 
                ID                        STRING_COL     NUMBER   VALUE Accepted  \
      0  ID2309480    #0809890 ^ True ^ ReP  ^ APPLE  #0809890    True     ReP     
      1  ID2398403   #0938409 ^ True ^ POST ^ GOOGLE  #0938409    True     POST    
      2  ID0398240  #0938402 ^ True ^ POST ^ VERIZON  #0938402    True     POST    
      
          Company  
      0     APPLE  
      1    GOOGLE  
      2   VERIZON  
      

      【讨论】:

        猜你喜欢
        • 2018-04-18
        • 2017-02-07
        • 1970-01-01
        • 2019-12-07
        • 2016-05-25
        • 1970-01-01
        • 2021-12-09
        • 1970-01-01
        • 2016-03-13
        相关资源
        最近更新 更多