标题可能有点离题。我会正确解释。我将收到一个数据帧df
,其格式为marker
的列之一具有意外格式。
有时,我将marker
,混合为单个marker
或范围marker
:
marker place1 place2
45 PQR STU
145.0-100 ABC DEF
267.0-175.8 GHI KLM
在转换期间,我需要拆分包含marker
的-
并变成这样:
marker firstkm lastkm place1 place2
45 45 NaN PQR STU
145.0-100 145.0 100 ABC DEF
267.0-175.8 267.0 175.8 GHI KLM
我还可以获得以下DataFrame,其中all marker
不是范围。
marker place1 place2
145.0 ABC DEF
267.0 GHI KLM
使用这段代码:
#Split marker to temporary dataframe , split_m
split_m = df.marker.str.split('-', expand=True)
split_m.columns=['firstkm', 'lastkm'] #hitting error here
split_m = split_km[['firstkm', 'lastkm']].replace([None], np.nan)
如果DataFrame类似于我上面显示的第一个示例,我可以实现所需的结果。但是,如果DataFrame像我展示的第二个示例一样,我将无法获得结果。我收到错误消息:
ValueError:长度不匹配:预期轴有1个元素,新值有2个元素
我了解错误是由于DataFrame无法在lastkm
中放置任何值引起的。但我不知道该如何处理。
如果我为第二个DataFrame打印split_m
,我会得到这个:
marker firstkm 145.0 145.0 267.0 267.0
如何立即将
np.nan
分配给lastkm
以产生以下结果:
marker firstkm lastkm 145.0 145.0 NaN 267.0 267.0 NaN
编辑
我遇到的另一种模式:
marker firstkm lastkm place1 place2 45 45 NaN PQR STU 145.0-100 145.0 100 ABC DEF 267.0-175.8 267.0 175.8 GHI KLM 18.1J 18.1J Nan GHI KLM P7.991-54.3 P7.991 54.3 GHI KLM UPM Ex 0.5 UPM Ex 0.5 NaN PPP SSS
UPMEx0.5
仍可接受。不区分大小写。
标题可能有点离题。我会正确解释。我将收到一个DataFrame df,其格式之一为“标记”的列具有意外格式。有时,我会标记,混合单个标记...
使用str.extract
:
您可以尝试以下方法: