我的意见:
df=pd.DataFrame({'A':['adam','monica','joe doe','michael mo'], 'B':['david','valenti',np.nan,np.nan]})
print(df)
A B
0 adam david
1 monica valenti
2 joe doe NaN
3 michael mo NaN
我需要将空格后的字符串提取到第二列,但在使用代码时:
df['B'] = df['A'].str.extract(r'( [a-zA-Z](.*))')
print(df)
A B
0 adam NaN
1 monica NaN
2 joe doe doe
3 michael mo mo
我在未提取值的每个单元格中接收NaN
。如何避免?
我尝试使用以下代码仅从存在NaN的行中提取:
df.loc[df.B.isna(),'B'] = df.loc[df.B.isna(),'A'].str.extract(r'( [a-zA-Z](.*))')
ValueError: Incompatible indexer with DataFrame
预期产量:
A B
0 adam david
1 monica valenti
2 joe doe doe
3 michael mo mo
你的方法不起作用,因为你陈述的左右两边形状不同。左边部分的形状为
(2,)
,右边部分的形状为(2, 2)
:退货:
你想在这里填上:
退货:
您可以采用列
1
,然后它将具有与左侧部分相同的形状(2,)
,并适合:退货:
我认为解决方案应该简化-按空格拆分,得到第二个列表并传递给^{} 函数:
细节:
您的解决方案应该更改:
更好的解决方案是将regex和
expand=False
更改为Series
:细节:
编辑:
对于从第一列中提取值,最简单的是使用:
相关问题 更多 >
编程相关推荐