将NaN分配给基于另一列的列

问题描述 投票:0回答:2

标题可能有点离题。我会正确解释。我将收到一个数据帧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,其格式之一为“标记”的列具有意外格式。有时,我会标记,混合单个标记...

python pandas dataframe
2个回答
0
投票

使用str.extract


1
投票

您可以尝试以下方法:

© www.soinside.com 2019 - 2024. All rights reserved.