I have a Pandas df:
import pandas as pd
import numpy as np
df = pd.DataFrame(['Air type:1', 'Space kind:2', 'water', np.NaN], columns = ['A'])
A
0 Air type:1
1 Space kind:2
2 water
3 NaN
我希望将A中具有“:”的条目拆分为两个新列。因此,我尝试将此操作与.loc筛选器结合使用:
df.loc[(df.A.str.contains(':')) & (~df.A.isnull()), ['B', 'C']] = df.A.str.split(':', expand = True)
结果并不是很有前景:
A B C
0 Air type:1 NaN NaN
1 Space kind:2 NaN NaN
2 water NaN NaN
3 NaN NaN NaN
如果我不进行过滤,它就能正常工作:
df[['B', 'C']] = df.A.str.split(':', expand = True)
A B C
0 Air type:1 Air type 1
1 Space kind:2 Space kind 2
2 water water None
3 NaN NaN NaN
问题在于 `water` 条目被错误地分配给新列,之后我必须手动修复它。为什么 `loc` + 赋值语句不起作用?理想情况下,我希望得到:
A B C
0 Air type:1 Air type 1
1 Space kind:2 Space kind 2
2 water NaN NaN
3 NaN NaN NaN
.loc
”结构不起作用吗? - User2321KeyError: "None of [Index(['B', 'C'], dtype='object')] are in the [columns]"
- anky