如何将字符串拆分为熊猫中的列?
问题描述:
我有这样的非常相似(它实际上是大)与两列的大熊猫数据帧:如何将字符串拆分为熊猫中的列?
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
答
这应该会给你想要的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)
为什么我得到了那个痕迹?... –
是否是另一种替代方法?... –