Data Wrangling

Pandas DataFrame高效浮点数转整数

Spread the love

Pandas是一个强大的Python数据处理库,经常与包含数值数据的DataFrame一起使用。一个常见的任务是将浮点数列(浮点数)转换为整数。本文详细介绍了在Pandas DataFrame中进行这种转换的有效方法,并突出了它们的优缺点。

目录

使用astype(int)进行浮点数到整数的转换

astype(int)方法提供了一种直接的Pandas类型转换方法。它直接将列的数据类型转换为整数。但是,理解其行为至关重要:它会截断小数部分,有效地执行向下取整操作。这意味着它会丢弃小数部分,始终向下舍入。

示例:


import pandas as pd

data = {'col1': [1.5, 2.7, 3.2, 4.9, 5.1]}
df = pd.DataFrame(data)

df['col1_int'] = df['col1'].astype(int)
print(df)

输出:


   col1  col1_int
0   1.5         1
1   2.7         2
2   3.2         3
3   4.9         4
4   5.1         5

这种方法的简单性是其优势,但其不灵活的舍入行为限制了其在需要其他舍入策略时的适用性。

利用pd.to_numeric()进行灵活的转换

pd.to_numeric()提供了更大的控制和灵活性。虽然它主要用于将各种数据类型转换为数字格式,但它对于浮点数到整数的转换非常有效,尤其是在与舍入函数结合使用时。

带有舍入的示例:


import pandas as pd
import numpy as np

data = {'col1': [1.5, 2.7, 3.2, 4.9, 5.1, np.nan]}
df = pd.DataFrame(data)

df['col1_int'] = pd.to_numeric(df['col1'], errors='coerce').round().astype(int)
print(df)

输出:


   col1  col1_int
0   1.5         2
1   2.7         3
2   3.2         3
3   4.9         5
4   5.1         5
5   NaN        NaN

这里,errors='coerce'通过将非数值值转换为NaN来优雅地处理非数值值。round()在最终astype(int)转换之前将值舍入到最接近的整数。

错误处理和高级舍入

为了更精确地控制舍入,可以使用NumPy的函数:

  • np.floor():向下舍入到最接近的整数。
  • np.ceil():向上舍入到最接近的整数。

记住使用pd.to_numeric()中的errors参数来处理潜在的错误(例如非数值值)。选择'coerce'会用NaN替换有问题的数值,防止错误。或者,'raise'会引发异常,而'ignore'会保留未经处理的非数值值。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注