python - 给定条件,修改数据框的值
问题描述
我有一个数据框,其中包含最多一个字母和三个数字的代码,例如: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)
解决方案
对于所有“代码”列,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()
直接在整个数据帧上。
推荐阅读
- svg - svg + inkscape + 不需要的裁剪
- r - 编译后R包`libs`目录太大,无法在CRAN上提交
- plot - 在 Mathematica 中使用 Plot3D 绘制 2D 空间 + 时间的函数
- python-3.x - 使用 Python3 在 Flask 中访问数据库时出现未绑定的本地错误
- typescript - 来自枚举和接口的自定义键/值类型
- javascript - ng-fullcalendar - 事件接收
- android - 我可以在没有 Sceneform 或 OpenGL 的情况下连接到 ARCore 的更新循环吗?
- javascript - 通过单击带有 JS 的按钮来更改段落元素
- azure-digital-twins - Azure 数字孪生和 Azure IoT Edge
- sql-server - dapper multli 内连接和左连接映射