我有一个非常类似的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
但我不明白如何添加其他列..
答案 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