似乎无法从字符串中剥离数字

时间:2019-07-05 17:18:03

标签: python python-3.x pandas dataframe

我有一个看起来像这样的数据框。

0                                             1.144921                     
1                                             1.000000                     
2                                             1.119507                     
3                                                  inf                     
4                                             0.000000                     
5                                                  inf                     
6                                             0.000000                     
7                                             0.000000                     
8                                             1.000000                     
9                                             0.000000                     
10                                            0.000000                     
11                                            0.000000                     
12                                            1.793687                     
13                                                 inf    

我正试图摆脱'inf'字符串。基本上,我只想删除所有字符串,仅将数字保留在数据框中。

我在下面尝试了以下代码。

kepler = re.sub("\D", "", kepler)
kepler = re.sub('[^0-9]','0', kepler)

运行这两行代码时,都会出现以下错误。

TypeError: expected string or bytes-like object

如果我有一个非常简单的字符串,它实际上可以工作。因此,这将起作用。

s = '83jjdmi239450  19dkd'
s = re.sub("\D", "", s)

不幸的是,该代码不适用于我的数据框。有什么想法吗?谢谢。

3 个答案:

答案 0 :(得分:2)

在示例数据帧上使用numpy.isfinite例程:

In [176]: df
Out[176]: 
           a
0   1.000000
1   1.119507
2        inf
3   0.000000
4        inf
5   0.000000
6   0.000000
7   1.000000
8   0.000000
9   0.000000
10  0.000000
11  1.793687
12       inf

In [177]: df = df[~np.isinf(df['a'])]

In [178]: df
Out[178]: 
           a
0   1.000000
1   1.119507
3   0.000000
5   0.000000
6   0.000000
7   1.000000
8   0.000000
9   0.000000
10  0.000000
11  1.793687

答案 1 :(得分:1)

尝试

df = pd.read_clipboard()
df.columns = ['col1','col2']
df

    col1    col2
0   1   1.000000
1   2   1.119507
2   3   inf
3   4   0.000000
4   5   inf
5   6   0.000000
6   7   0.000000
7   8   1.000000
8   9   0.000000
9   10  0.000000
10  11  0.000000
11  12  1.793687
12  13  inf

df.col2[df.col2 < np.inf]
0     1.000000
1     1.119507
3     0.000000
5     0.000000
6     0.000000
7     1.000000
8     0.000000
9     0.000000
10    0.000000
11    1.793687

答案 2 :(得分:1)

  

我正试图摆脱'inf'字符串。

您将其描述为字符串,但这只是64位浮点数的印刷表示形式。

  

TypeError:预期的字符串或类似字节的对象

您不能将浮点数放入正则表达式操作中,因为正则表达式需要一个字符串。

相反,将无限数量变成NaN s,然后将它们丢弃:

rows = [dict(x=1.79),
        dict(x=math.inf)]
df = pd.DataFrame(rows).replace([np.inf, -np.inf], np.nan)
df = df.dropna()