比较熊猫数据框列中的值时出现类型错误

Posted

技术标签:

【中文标题】比较熊猫数据框列中的值时出现类型错误【英文标题】:TypeError when comparing values in pandas dataframe column 【发布时间】:2021-11-01 03:59:14 【问题描述】:

我有以下代码来过滤掉一些数据,但有些值是字符串,具体来说,他们说“待定”。所以首先我过滤掉那些说“待定”的值,然后我设置一个范围(500

(在下面的代码中,'data' 是一个包含 [Company, Normal, CAPEX] 列的数据框,CAPEX 列有整数、浮点数和一个字符串,上面写着 'Pending')

data = data[(data.CAPEX != 'Pending')]
data = data[(data.CAPEX >= 500) & (data.CAPEX <= 1500)]

但随后弹出错误:

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

我想知道我是否可以消除任何字符串,而不仅仅是那些说“待定”的字符串。我已经试过了 数据=数据[(类型(数据.CAPEX)!= str)] 但它没有用。

另外,我不知道 TypeError 是怎么回事。我的列表包含数字,我将它们与另一个数字进行比较,没有字符串。

【问题讨论】:

您可以创建一个包含 CAPEX 列和几行示例数据的示例数据框。就目前而言,您似乎希望我们在写答案时做到这一点。 根据您创建数据框的方式,pandas 可能已经猜到了数据类型。如果读取 CSV 并且列包含整数和“待处理”的混合,则该列将是字符串值。如果没有“Pending”,那么它将是 int 类型。因此,您的第一次或第二次比较将失败,具体取决于它所选择的。 - 所以值得注意的是你是如何阅读这个 DF 的。 【参考方案1】:

该错误试图告诉您无法将字符串与整数进行比较。 我会创建一个新的数据框来过滤掉“待处理”字符串

no_pending_df = data[(data.CAPEX != 'Pending')]

然后将该列转换为整数:

no_pending_df["CAPEX"] = pd.to_numeric(no_pending_df["CAPEX"])

现在您应该能够通过以下方式进行合法比较:

compared_no_pending_df = no_pending_df[(no_pending_df.CAPEX &gt;= 500) &amp; (no_pending_df.CAPEX &lt;= 1500)]

【讨论】:

以上是关于比较熊猫数据框列中的值时出现类型错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥在一种情况下更改熊猫数据框列中的值很快,而在另一种情况下更改速度很慢?

熊猫数据框列中的成员资格测试

如何迭代熊猫数据框列中的元素?

用另一个值替换熊猫数据框列中的几个值

如何将 pyspark 数据框列中的值与 pyspark 中的另一个数据框进行比较

过滤熊猫数据框列中的字符串/浮点数/整数值