python - 如何检查包含不同数据类型的熊猫数据框中的负值?
问题描述
我有一个包含模型数据的数据框,如下所示:
FUND ID FUND NAME AMOUNT client code Price description Trade Date Trade Datetime
0 10101 Holdings company A 10000.5 1234 124.3 abcd 2020-08-19 2020-08-19 12:30:00
1 20202 Holdings company B -2000.5 192 -24.2 abcd 2020-08-20 2020-08-20 12:30:00
2 30303 Holdings company C 3000.5 123 192 NaN 2020-08-21 2020-08-21 12:30:00
3 10101 Holdings company A 10000 1234567 5.5 NaN 2020-08-22 2020-08-22 12:30:00
4 20202 Holdings company B 10000.5 9999 3.887 abcd 2020-08-23 2020-08-23 12:30:00
如上所示,此数据框具有不同的数据类型,我正在努力创建一个列表,根据该列是否包含任何负值,将每列标记为 True 或 False。对于包含非数字数据的列,我希望列表默认将其标记为 False。
我希望代码灵活,以便我可以将其应用于具有不同列数的不同数据集(如果可能)
基于上述模型数据框的所需列表:
negative_list = [False, False, True, False, True, False, False, False]
或者类似这样的数据框:
col isnegative
0 FUND ID False
1 FUND NAME False
2 AMOUNT True
3 client code False
4 Price True
5 description False
6 Trade Date False
7 Trade Datetime False
解决方案
用于DataFrame.select_dtypes
选择数字列,然后使用DataFrame.lt
+DataFrame.any
并使用.reindex
with fill_value=False
:
s = df.select_dtypes(np.number).lt(0).any()\
.reindex(df.columns, fill_value=False)\
.rename_axis("col").reset_index(name='isnegative')
结果:
print(s)
col isnegative
0 FUND ID False
1 FUND NAME False
2 AMOUNT True
3 client code False
4 Price True
5 description False
6 Trade Date False
7 Trade Datetime False
推荐阅读
- db2 - 在 db2 dpf 中恢复非 SVV 备份
- ruby - Kernel.require 和 Kernel.gem_original_require 有什么区别?
- jestjs - 未达到阈值时,Jest 测试覆盖率不会失败
- c - 我的 C 函数代码有问题
- php - 使用 array_key_exist 检查用户传递的值是否存在于数组中。澄清 array_key_exist
- python - 在转义引号内捕获字符串
- scala - Scala:当它们具有相同的属性时将一些元素组合在一个列表中
- mongodb - 原始文档列表上的 MongoDB 聚合框架 $map
- javascript - 防止在画布上绘制矩形时闪烁
- mod-rewrite - 如何重写nextcloud的url