如何在pandas中将字符串拆分为列?

2024-10-03 04:27:38 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

但我不知道如何添加其他列。。你知道吗


Tags: idtruenumberappledfstringgooglecol
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  

这会给你在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)

相关问题 更多 >