我正在清洁一些产品,发现一个问题位于线下方 -
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_numeric
与 errors='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/