在数据框中的某些列上将Float转换为Int

Rus*_*sty 7 python pandas

我试图将列0到4和6转换为当前float类型的int.

我试过了:

df[0:4,6].astype(int)
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用......

piR*_*red 12

考虑 df

df = pd.DataFrame(np.random.rand(10, 10) * 10)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

np.r_得到slc

slc = np.r_[0:4, 6]
df[slc] = df[slc].astype(int)
df
Run Code Online (Sandbox Code Playgroud)

或者使用键作为列名传递类型字典

df.astype({c: int for c in slc})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 那是一个完全独立的问题。它与“ mapping2”的创建方式有关,它是另一个数据帧的“视图”。您可以在分配给各个列之前通过执行“ mapping2 = mapping2.copy()”来解决此问题。“ mapping2 = mapping2.copy()”将使其自身成为一个新的新数据框,该数据框未附加到任何其他数据框,并且您可以随意分配其列而不发出任何警告。 (2认同)
  • `df [slc] .astype(int)`返回数据类型为`int`的数据帧.但它并没有改变它.您需要将其分配回相同的位置. (2认同)

Abu*_*oeb 6

我收到错误,因为我的一些列值NaN显然无法转换为int. NaN因此,更好的方法是在转换之前处理datatype并避免ValueError: Cannot convert non-finite values (NA or inf) to integer.

df['col_name'] = df['col_name'].fillna(0).astype(int)
Run Code Online (Sandbox Code Playgroud)

填充NaN然后转换为本例中0所需的内容。datatypeint