如何将字符串分解为pandas中的列?

时间:2017-04-10 18:50:13

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

我有一个非常类似的pandas数据框(它实际上更大)有两列:

for each

如何将. A拆分为:

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

在阅读此tutorial以及本网站的其他一些问题后,我试图将它们拆分为:

STRING_COL

但显然这是错误的,因为它给我带来了以下追溯:

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

那么,如何将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

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

2 个答案:

答案 0 :(得分:2)

这应该会在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)

答案 1 :(得分:1)

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

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