首页 > 解决方案 > 给定条件,修改数据框的值

问题描述

我有一个数据框,其中包含最多一个字母和三个数字的代码,例如:A478。有些代码只有一位或两位数字,但我需要在所有具有三位数字的值之前放置一个点,以将它们转换为以下形式:

A213 至 A21.3

简而言之,我需要以这种方式转换 df :

id code1 code2 code3 code4
0  A099  B25   A022  NaN
1  B21   J2    Z23   H355
2  C212 C03  NaN   NaN

id code1 code2 code3 code4
0  A09.9 B25   A02.2 NaN
1  B21   J2    Z23   H35.5
2  C21.2 C03  NaN   NaN

我试过使用这样的东西,但我得到了一个无效的语法,所以我不知道如何评估它的条件,只有当它有三个数字(或 4 str)。

df.apply(lambda x: x.str[:3]+'.'+x.str[3:] if len(x) == 4)

标签: pythonpandas

解决方案


对于所有“代码”列,applymap如果元素不是 NaN 且其长度为 4,则将 lambda 映射到插入点的元素:

df.iloc[:,1:] = df.iloc[:,1:].applymap(lambda x: x[:3]+'.'+x[3:] if not pd.isna(x) and len(x) == 4 else x)

结果:

   id  code1 code2  code3  code4
0   0  A09.9   B25  A02.2    NaN
1   1    B21    J2    Z23  H35.5
2   2  C21.2   C03    NaN    NaN

PS:如果id是索引,您可以df.applymap()直接在整个数据帧上。


推荐阅读