在熊猫中过滤列并转换为浮点

时间:2019-09-26 08:48:18

标签: python pandas dataframe

我有一个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

现在的问题是,我只想将整数留在列中,然后将它们强制转换为浮点数,这样我就可以对列进行数据可视化。

我想知道我是否可以进行一些标准化的过滤,但无法正常工作。

是否有一项操作,我可以过滤掉所有NaNString的值,而只剩下一个值,可以将其转换为float或{{1 }}

2 个答案:

答案 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