【发布时间】:2020-05-29 17:18:53
【问题描述】:
标题可能有点不对劲。我会正确解释这一点。我将收到一个 DataFrame 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 仍然可以接受。不区分大小写。
【问题讨论】: