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

时间:2020-01-28 10:48:53

标签: python regex python-3.x pandas dataframe

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

一个col是Precise_Age,另一个col是Browser。

在浏览器中,我只想要名称和版本。(如果版本是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中,我只需要标准值,替换空白,逗号等。 如果age具有超过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

1 个答案:

答案 0 :(得分:0)

在使用import React, { memo } from "react"; import { StyleSheet, View } from "react-native"; import Animated from "react-native-reanimated"; function ProgressBar({ width }) { return ( <View style={styles.ProgressBar}> <Animated.View style={[styles.absoluteFill, { width }]}></Animated.View> </View> ); } const styles = StyleSheet.create({ ProgressBar: { height: 22, borderWidth: 2, borderColor: "#000", borderRadius: 10, width: 200 }, absoluteFill: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0, backgroundColor: "#000", borderRadius: 5 } }) export default memo(ProgressBar); 作为分隔符的split Browser列之后,您可以使用map提取或替换该列中的字符和数字,从而以您所需要的方式转换数据需要。连接最后两列以获得该框架的所需输出。

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

map

df age

的输出
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)