我有一个pandas数据框,其中包含一些非常未经过滤的数据
df['Q53']
OUTPUT:
0 Hvor mange timer træner din virksomhed medarbe...
3 NaN
4 NaN
5 NaN
6 2
7 NaN
8 10
9 NaN
10 50
11 NaN
12 ?
13 ?
14 8
15 NaN
16 2
17 0
18 1
19 1
20 5
21 7x3 timer
22 NaN
23 8 timer
24 NaN
25 0
26 8
27 NaN
现在的问题是,我只想将整数留在列中,然后将它们强制转换为浮点数,这样我就可以对列进行数据可视化。
我想知道我是否可以进行一些标准化的过滤,但无法正常工作。
是否有一项操作,我可以过滤掉所有NaN
和String
的值,而只剩下一个值,可以将其转换为float
或{{1 }}
答案 0 :(得分:2)
您可以检查isdigit
是否仅选择True
列。
df[df['Q53'].apply(lambda x: str(x).isdigit())]
答案 1 :(得分:1)
将值转换为数字,然后删除错误的值:
df['Q53'] = pd.to_numeric(df['Q53'], errors='coerce')
df = df.dropna(subset=['Q53'])
print (df)
Q53
6 2.0
8 10.0
10 50.0
14 8.0
16 2.0
17 0.0
18 1.0
19 1.0
20 5.0
25 0.0
26 8.0
编辑:我建议不要使用eval
,这是提取介于x
之间的数字,转换为浮点数和之间的倍数的解决方案。
然后用\d+
模式中提取的所有数字替换缺失值,并将其转换为数字。
最后通过DataFrame.dropna
删除缺失值:
dfx = df['Q53'].astype(str).str.extract('(\d+)x(\d+)').astype(float).prod(axis=1, min_count=1)
num = df['Q53'].astype(str).str.extract('(\d+)', expand=False)
df['Q53'] = dfx.fillna(pd.to_numeric(num, errors='coerce'))
df = df.dropna(subset=['Q53'])
print (df)
Q53
6 2.0
8 10.0
10 50.0
14 8.0
16 2.0
17 0.0
18 1.0
19 1.0
20 5.0
21 21.0
23 8.0
25 0.0
26 8.0