首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查包含不同数据类型的pandas dataframe中的负值?

如何检查包含不同数据类型的pandas dataframe中的负值?
EN

Stack Overflow用户
提问于 2020-08-27 23:33:52
回答 2查看 228关注 0票数 1

我有一个包含样机数据的dataframe,如下所示:

代码语言:javascript
运行
复制
   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。

我希望代码是灵活的,这样如果可能的话,我可以将它应用于具有不同列数的不同数据集

基于上面的样机数据框架的所需列表:

代码语言:javascript
运行
复制
negative_list = [False, False, True, False, True, False, False, False]

或类似于以下内容的数据帧:

代码语言:javascript
运行
复制
     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
EN

回答 2

Stack Overflow用户

发布于 2020-08-27 23:40:05

使用DataFrame.select_dtypes选择数值列,然后使用DataFrame.lt + DataFrame.any并将.reindexfill_value=False一起使用

代码语言:javascript
运行
复制
s = df.select_dtypes(np.number).lt(0).any()\
      .reindex(df.columns, fill_value=False)\
      .rename_axis("col").reset_index(name='isnegative')

结果:

代码语言:javascript
运行
复制
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
票数 2
EN

Stack Overflow用户

发布于 2020-08-27 23:49:31

简单地理解一下dtypes()就可以做到这一点

代码语言:javascript
运行
复制
import io
df = pd.read_csv(io.StringIO("""   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"""), sep="\s\s+", engine="python")

dfc = pd.DataFrame([{k:False if str(t)=="object" else (df.loc[:,[k]]<=0).any().all() 
               for k,t in df.dtypes.to_dict().items()} ]).T.reset_index().rename(columns={"index":"col", 0:"isnegative"})

输出

代码语言:javascript
运行
复制
                 col  isnegative
0            FUND ID       False
1          FUND NAME        True
2             AMOUNT       False
3        client code        True
4  Price description       False
5         Trade Date       False
6     Trade Datetime       False
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63619443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档