Python拆分为两列(如果包含“”),否则插入Nan

2024-04-28 11:29:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我在DataFrame中有一个名为both_ntf的列,如下所示:

column1
411.1
104.5-105.6
167.3-166.9
254
399
373.5

我的预期结果是:

column1           column2        column3
411.1              411.1          NaN
104.5-105.6        104.5          105.6
167.3-166.9        167.3          166.9
254                254            NaN
399                399            NaN

我做的if语句似乎不起作用

 if '-' in both_ntf['column1']:

    print("if")
    rng_ntf = both_ntf[both_ntf['column1'].str.contains("-", na=False)]
    rng_ntf[['column2','column3']] =rng_ntf.column1.str.split("-",expand=True)

    #Add
    filtered_ntf = rng_ntf


elif '-' not in both_ntf['column1']:

    print("elif")
    nrng_ntf = both_ntf[~both_ntf['column1'].str.contains("-", na=False)]
    nrng_ntf['column2'] = nrng_ntf['column1']

filtered_ntf = filtered_ntf.append(nrng_ntf, sort=True)

如您所见,rng_ntfnrng_ntf是临时数据帧,然后附加到新的数据帧filtered_ntf。我希望这样做更有效,更快


Tags: inifnanfilteredprintnacolumn1rng
2条回答

尝试:

pd.concat([df, df.column1.str.split('-', expand=True)], axis=1)

    column1       0       1
0   411.1         411.1   None
1   104.5-105.6   104.5   105.6
2   167.3sb-166.9 167.3sb 166.9
3   254           254     None
4   399           399     None
5   373.5         373.5   None

您还可以指定列名


split_df = df.column1.str.split('-', expand=True)
split_df.columns=['column2', 'column3']
pd.concat([df, split_df], axis=1)

这应该可以工作,但我还没有测试它:

def split_values(x, col, i, sep='-'):
    items = x[col].split(sep)
    try:
        return items[i]
    except:
        return None

df['column2'] = df.apply(split_values, axis=1, args=("column1", 0))
df['column3'] = df.apply(split_values, axis=1, args=("column1", 1))

相关问题 更多 >