我有一个看起来像这样的数据框。
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)
不幸的是,该代码不适用于我的数据框。有什么想法吗?谢谢。
答案 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()