如何将字符串拆分为熊猫中的列?

问题描述:

我有这样的非常相似(它实际上是大)与两列的大熊猫数据帧:如何将字符串拆分为熊猫中的列?

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 

但显然t他是错误的,因为它返回我下面的回溯:

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

那么,如何分割成STRING_COL^以作为分隔符其他块?

UPDATE

我也试过这一个:

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

但我不知道如何添加其他列..

你的第二个方法是在正确的轨道上 - 从那里迭代并分配列 - 如下所示:

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 
+0

为什么我得到了那个痕迹?... –

+0

是否是另一种替代方法?... –

这应该会给你想要的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)