python - 在句点“.”之后提取文本 来自 Pandas Dataframes 列中的值
问题描述
我在数据框中有一列,如下所示:
| Category |
------------
| B5050.88
| 5051.90
| B5050.97Q
| 5051.23B
| 5051.78E
| B5050.11
| 5051.09
| Z5052
我想在句号之后提取文本。例如,从 B5050.88,我只想要“88”;从 5051.78E 开始,我只想要“78E”;对于 Z50502,它什么都不是,因为没有期限。
预期输出:
| Category | Digits |
---------------------
| B5050.88 | 88 |
| 5051.90 | 90 |
| B5050.97Q| 97Q |
| 5051.23B | 23B |
| 5051.78E | 78E |
| B5050.11 | 11 |
| 5051.09 | 09 |
| Z5052 | - |
我试过用这个
df['Digits'] = df.Category.str.extract('.(.*)')
但我没有得到正确的答案。使用上述方法,对于 B5050.88,我得到相同的 B5050.88;对于 5051.09,我得到的是 NaN。如果没有文本,基本上是 NaN。
解决方案
你可以做
splits = [str(p).split(".") for p in df["Category"]]
df["Digits"] = [p[1] if len(p)>1 else "-" for p in splits]
IE
df = pd.DataFrame({"Category":["5050.88","5051.90","B5050.97","5051.23B","5051.78E",
"B5050.11","5051.09","Z5052"]})
#df
# Category
# 0 5050.88
# 1 5051.90
# 2 B5050.97
# 3 5051.23B
# 4 5051.78E
# 5 B5050.11
# 6 5051.09
# 7 Z5052
splits = [str(p).split(".") for p in df["Category"]]
splits
# [['5050', '88'],
# ['5051', '90'],
# ['B5050', '97'],
# ['5051', '23B'],
# ['5051', '78E'],
# ['B5050', '11'],
# ['5051', '09'],
# ['Z5052']]
df["Digits"] = [p[1] if len(p)>1 else "-" for p in splits]
df
# Category Digits
# 0 5050.88 88
# 1 5051.90 90
# 2 B5050.97 97
# 3 5051.23B 23B
# 4 5051.78E 78E
# 5 B5050.11 11
# 6 5051.09 09
# 7 Z5052 -
不那么漂亮,但它的工作原理
编辑:
添加了“-”而不是 NaN 和代码片段
推荐阅读
- php - Laravel 5.6:多对多关系返回空对象
- docker - 是否可以在远程主机上外部运行 gitlab 的 docker 注册表?
- scala - 在信息进入控制器之前转换为小写用户名
- java - 解密视频文件并保存到内部存储
- autocomplete - 仅对选项卡自动完成并输入
- sql - 如何将值插入到 SQL Server 中的联结/链接表中?
- php - 在 laravel 中更新关系
- semantic-versioning - semver:匹配预发布后缀 (3.* =/= 3.4.5-1)
- hibernate - Hibernate过滤SpringBoot中的关联实体
- python - 如何使用 NLP 获取句子的含义?