删除熊猫中的特殊字符和非标准值

Posted

技术标签:

【中文标题】删除熊猫中的特殊字符和非标准值【英文标题】:Remove special characters and non standard values in a pandas 【发布时间】:2020-05-13 18:25:42 【问题描述】:

我正在使用 pandas 数据框,其中列中包含非标准值。 有没有一种方法可以提取或替换列中的字符和数字。 我对应用正则表达式模式来清理数据非常陌生。

第一列是 Precise_Age,第二列是浏览器。

在浏览器列中,我只想要名称和版本。(如果版本是 10.1.2,那么我只想要 10)- android 10、Android 4、ios 11 等。

Browser

Browser                                        desired_output
75.0.3770.143 | Chrome Dev    | Android | 9       Android 9
78.0.3904.108 | Chrome Dev    | Android | 9       Android 9
79.0.3945.93  | Chrome Dev    | Android | 9       Android 9
79.0.3945.93  | Chrome Dev    | Android | 8.0.0   Android 8
              |               | Android | 8.1.0   Android 8
79.0.3945.116 | Chrome Dev    | Android | 10      Android 10
79.0.3945.93  | Chrome Dev    | Android | 5.1     Android 5
              |               | Android | 10      Android 10
              | Facebook      | Android | 8.1.0   Android 8
79.0.3945.116 | Chrome Dev    | Android | 4.4.4   Android 4
              |               | Android | 8.1.0   Android 8
79.0.3945.79  | Chrome Dev    | Windows | 8       Windows 8
77.0.3865.116 | Chrome Dev    | Android | 9       Android 9
88.1.284108841| Google Search | iOS     | 13.3    iOS 13

在 Age col 中,我只想要标准值,替换空格、逗号等。 如果年龄的值超过 100 个,则将其全部设为缺失值。

Age

Age            desired_output
67                 67
66                 66
67.5               67
60대후반        60
1949ë…„            null
63세              63
83ë…„ìƒ        83
11세              11
7217861839         null
59 years           59
60세              60
73.87083774        73
54ë…„ìƒ        54
55세              55
327                null
37ë…„ìƒ        37
642                null
523                null
0.61               0
53세              53
42ë…„ìƒ        42
757575             null
91.98192554        91
1.11991            1
83세(만82세)    83
4324234            null
8827               null
11 Years           11

【问题讨论】:

请检查图片链接以获取浏览器所需的输出和蓝色的年龄 你试过什么?什么没用?你得到了什么?你期待什么?什么不适用于您的代码,它在哪里? 请不要在您的问题中包含图片,而是Minimal, Reproducible Example。 @Toto 我不知道如何清理浏览器 col 和 age,因为这些 col 存在许多非标准值。我想要所需的输出,正如我提到的与这些 cols 相对应的那样。帮我看看如何编写代码以实现所需的输出 @LeoE 感谢您的建议.. 下次提问时我会小心的 【参考方案1】:

在splitBrowser 列使用| 作为分隔符之后,您可以使用map 提取或替换列中的字符和数字,以按照您需要的方式转换数据。加入最后两列以获得此帧的所需输出。

可以再次应用之前使用的相同原理来替换列Age 上的数据,现在使用re.sub 作为map 函数来仅获取“标准值”。

import pandas as pd
import re

br = pd.read_csv("browser.csv")
age = pd.read_csv("age.csv")

br = br.iloc[:, 0].str.split("|", expand=True)
br.iloc[:, -2] = br.iloc[:, -2].map(lambda x: x.strip())
br.iloc[:, -1] = br.iloc[:, -1].map(lambda x: x.split(".")[0])

df = pd.DataFrame()

df["Browser Version"] = br.iloc[:, -2] + br.iloc[:, -1]

# remove blanks, commas, symbols, etc
age.iloc[:, -1] = age.iloc[:, -1].map(lambda x: re.sub(r"\D+.*", "", x))

# if the number in age is up to a 100 keep it, else replace with "null".
age.iloc[:, -1] = age.iloc[:, -1].map(lambda x: int(x) if int(x) <= 100 else "null")

print(df)
print(age)

dfage

的输出
   Browser Version    |          Age
0        Android 9    |    0      67
1        Android 9    |    1      66
2        Android 9    |    2      67
3        Android 8    |    3      60
4        Android 8    |    4    null
5       Android 10    |    5      63
6        Android 5    |    6      83
7       Android 10    |    7      11
8        Android 8    |    8    null
9        Android 4    |    9      59
10       Android 8    |    10     60
11       Windows 8    |    11     73
12       Android 9    |    12     54
13          iOS 13    |    13     55
14                    |    14   null
15                    |    15     37
16                    |    16   null
17                    |    17   null
18                    |    18      0
19                    |    19     53
20                    |    20     42
21                    |    21   null
22                    |    22     91
23                    |    23      1
24                    |    24     83
25                    |    25   null
26                    |    26   null
27                    |    27     11

【讨论】:

以上是关于删除熊猫中的特殊字符和非标准值的主要内容,如果未能解决你的问题,请参考以下文章

在python中用熊猫反转特殊字符

PySpark:读取 pyspark 框架中的 csv 数据。为啥它在框架中显示特殊字符?除了使用熊猫之外,以表格形式显示的任何方式[重复]

用vba,删除excel文件里某列数据中的[,]和[¥]两个特殊字符

Python:使用熊猫从csv文件中提取特定列(包含特殊字符)

在熊猫数据框中替换特殊字符

删除scrapy python中的特殊字符