首页 > 解决方案 > 在句点“.”之后提取文本 来自 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。

标签: pythonpandas

解决方案


你可以做

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 和代码片段


推荐阅读