首页 > 解决方案 > 使用另一列在 Pandas 中创建新的格式化列

问题描述

我在熊猫数据框中有以下数据集:

I219
F03
C449
C189

我需要创建一个新列,如果单元格的长度为 4,那么它需要在第三个字符之后有一个句点,如下所示:

I21.9
F03
C44.9
C18.9

在挖掘 StackOverflow 之后,我想出了这个 lambda 表达式,但我似乎无法让它工作。

df['UNDERLYINGCAUSE_TEST'] = df.UNDERLYINGCAUSE.apply(lambda x: x if len(x) == 4 else x[0:3] + '.' + x[3:])

我得到的错误是'object type'float' as no len()'。不确定这是从哪里来的,因为我在此列中没有任何浮点值。

标签: pythonpandaslambda

解决方案


你快到了。您的 lambda 函数与您想要的完全相反,因为格式不正确。此外,您可以使用 将列转换dtype为对象astype(str)。尝试这个:

df['UNDERLYINGCAUSE_TEST'] = df.UNDERLYINGCAUSE.astype(str).apply(lambda x: x[0:3] + '.' + x[3:] if len(x) == 4 else x )

或者,由于您正在处理列/系列操作,您可以使用map而不是apply,它在列操作方面更快更有效。

df['UNDERLYINGCAUSE_TEST'] = df.UNDERLYINGCAUSE.astype(str).map(lambda x: x[0:3] + '.' + x[3:] if len(x) == 4 else x )

输出

  UNDERLYINGCAUSE UNDERLYINGCAUSE_TEST
0            I219                I21.9
1             F03                  F03
2            C449                C44.9
3            C189                C18.9

推荐阅读