比较熊猫数据框列中的值时出现类型错误
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 >= 500) & (no_pending_df.CAPEX <= 1500)]
【讨论】:
以上是关于比较熊猫数据框列中的值时出现类型错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥在一种情况下更改熊猫数据框列中的值很快,而在另一种情况下更改速度很慢?