删除熊猫中的特殊字符和非标准值
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)
df 和 age
的输出 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
【讨论】:
以上是关于删除熊猫中的特殊字符和非标准值的主要内容,如果未能解决你的问题,请参考以下文章
PySpark:读取 pyspark 框架中的 csv 数据。为啥它在框架中显示特殊字符?除了使用熊猫之外,以表格形式显示的任何方式[重复]
用vba,删除excel文件里某列数据中的[,]和[¥]两个特殊字符