首页 > 解决方案 > 如何在不使用 for 循环的情况下有条件地从我的数据框中删除列?

问题描述

我正在尝试根据价格过滤 AppleStore.csv 数据框。我想创建一个“新”数据框,条件是只包含免费应用程序。下面是我用来在 googleplaystore.csv 应用程序数据帧上过滤相同条件的代码,它运行良好。

import numpy as np


df_A = pd.read_csv("AppleStore.csv") 
df_G = pd.read_csv('googleplaystore.csv')

df_G.dropna(axis = 0, how = "any", inplace = True)

df_gg = df_G[df_G.Price == '0'] # df_gg is the new google apps df with only free apps

df_apple = df_A[df_A.price == '0.0'] 

当我运行上面的代码时,它只返回列标题行和错误消息:

C:\Users\Dan\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py:253: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  res_values = method(rvalues)

我很不确定该怎么做。任何和所有的帮助表示赞赏。

标签: pythonpandasdataframe

解决方案


问题是有数字列或混合数字与字符串。因此,如果所有列都是数字,请尝试通过0string进行比较:'0''0.0'

df_gg = df_G[df_G.Price == 0] 
df_apple = df_A[df_A.price == 0] 

如果混合类型因为将缺失值替换为0数字,请尝试转换为数字列:

df_G.Price = df_G.Price.astype(float)
df_A.Price = df_A.Price.astype(float)

然后比较:

df_gg = df_G[df_G.Price == 0] 
df_apple = df_A[df_A.price == 0] 

推荐阅读