在python中转换int

时间:2018-12-23 12:04:21

标签: python pandas

数据框= reviews

当我尝试将评分列转换为整数时出现以下错误

  

``无法将非有限值(NA或inf)转换为整数''

我该如何解决?

reviews.replace([np.inf, -np.inf], np.nan)
reviews.dropna() 

reviews['Rating'].astype('int')

2 个答案:

答案 0 :(得分:1)

最简单的方法是先将replace infs转换为NaN,然后​​使用dropna

示例数据框:

>>> df = pd.DataFrame({'col1':[1, 2, 3, 4, 5, np.inf, -np.inf], 'col2':[6, 7, 8, 9, 10, np.inf, -np.inf]})

>>> df
       col1       col2
0  1.000000   6.000000
1  2.000000   7.000000
2  3.000000   8.000000
3  4.000000   9.000000
4  5.000000  10.000000
5       inf        inf
6      -inf       -inf

解决方案1:

以这样一种方式创建df_new,您就不会丢失真实的数据帧,而所需的dataFrame则不会分别df_new

>>> df_new = df.replace([np.inf, -np.inf], np.nan).dropna(subset=["col1", "col2"], how="all").astype(int)
>>> df_new
   col1  col2
0     1     6
1     2     7
2     3     8
3     4     9
4     5    10

解决方案2:

使用isin~

>>> ff = df.isin([np.inf, -np.inf, np.nan]).all(axis='columns')
>>> df[~ff].astype(int)
   col1  col2
0     1     6
1     2     7
2     3     8
3     4     9
4     5    10

或直接进入原始数据框,使用pd.DataFrame.isin并检查带有pd.DataFrame.any的行。最后,使用布尔数组对数据帧进行切片。

>>> df = df[~df.isin([np.nan, np.inf, -np.inf]).any(1)].astype(int)
>>> df
   col1  col2
0     1     6
1     2     7
2     3     8
3     4     9
4     5    10

here摘录自@piRSquared

解决方案3:

您可以自由使用dataFrame.mask + numpy.isinfdronna()

>>> df = df.mask(np.isinf(df)).dropna().astype(int)
>>> df
   col1  col2
0     1     6
1     2     7
2     3     8
3     4     9
4     5    10

答案 1 :(得分:0)

.replace().dropna()均未执行其动作,例如修改现有数据框,除非您指定它们。但是,如果您确实指定执行它们,那么您的代码将起作用:

reviews.replace([np.inf, -np.inf], np.nan, inplace=True)
reviews.dropna(inplace=True) 

reviews['Rating'].astype('int')

或者:

reviews = reviews.replace([np.inf, -np.inf], np.nan)
reviews = reviews.dropna() 

reviews['Rating'].astype('int')