python - 如何在不使用 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)
我很不确定该怎么做。任何和所有的帮助表示赞赏。
解决方案
问题是有数字列或混合数字与字符串。因此,如果所有列都是数字,请尝试通过0
string进行比较:'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]
推荐阅读
- java - Java 测试覆盖率工具仅报告已更改文件的覆盖率?
- javascript - 如何在我的 ajax 脚本中实现 setinterval?
- python - 输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值 - 尝试了所有方法但不起作用
- php - 验证规则(存在)在测试期间产生错误
- python - 将另一个服务集成到 django 的干净方法是什么
- r - R中的形状文件内部连接失败
- javascript - 在 svg 中渲染 javascript
- css - 光标不在边缘转动
- excel - 大型数据集的两个值的 if 语句
- unit-testing - SilverStripe Behat 抛出错误:在 null 上调用成员函数 manage() (Behat\Testwork\Call\Exception\FatalThrowableError)