首页 > 解决方案 > 如何检查包含不同数据类型的熊猫数据框中的负值?

问题描述

我有一个包含模型数据的数据框,如下所示:

   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

标签: pythonpandasdataframe

解决方案


用于DataFrame.select_dtypes选择数字列,然后使用DataFrame.lt+DataFrame.any并使用.reindexwith 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

推荐阅读