python - 使用 apply + lambda 清理 Pandas 中的数字数据

标签 python python-3.x pandas lambda series

我正在清洁一些产品,发现一个问题位于线下方 -

    feed_df['sale_price'] = feed_df['sale_price'].apply(lambda x: x if x > 0 else None)

这里我检查了销售价格的数据类型是对象。

错误是:

TypeError: '>' not supported between instances of 'str' and 'int'

那么如何更改 lambda 表达式来解决此问题?

最佳答案

你所说的“清理”实际上是让你的数据变脏。 Pandas 专注于矢量化操作。否则,使用 Pandas 比使用值列表和字典好不了多少。

这意味着您应该确保数字系列具有数字数据类型。另一种 object dtype 可以保存任意类型,但只不过是一系列指针,就像 list 一样。另一方面,数字系列将作为连续的内存块保存在内存中。您将看到性能和内存使用方面的改进。

在这种情况下,您可以将 pd.to_numericerrors='coerce' 结合使用,然后有条件地更新您的系列。无法转换为数字的值将显示为 NaN

feed_df['sale_price'] = pd.to_numeric(feed_df['sale_price'], errors='coerce')
feed_df.loc[feed_df['sale_price'] <= 0, 'sale_price'] = np.nan

请注意,我们使用 np.nan 而不是 None。这是故意的。 NaN(“不是数字”)被视为浮点,而None强制 Pandas 使用object dtype。我们不希望这样。坚持使用数字数据类型来获取数字数据,您会很高兴的。

关于python - 使用 apply + lambda 清理 Pandas 中的数字数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51553634/

相关文章:

python - 使用 scipy.io.wavfile 读取 wav 文件然后写入不会重现原始文件

python - python中逆ERF函数的命令

python - 使用 pandas 在 python 中打乱 excel 数据

python - 使用 read_csv 只读取奇数/数字列

python - 重定向到引用页面的最佳方式

python - 创建一个用于在 Python3 中运行二进制程序的最小沙箱

python - 在 Telegram Bot python中发送长消息

python - 如何进行类型注释类型断言?

python - Pandas fillna : Output still has NaN values

python - Python TypeError:需要一个整数(元组类型元组)-(OpenCV/Numpy)