DataFrame 数据筛选

DataFrame 数据筛选

近期使用pandas比较频繁,在进行数据处理的时候经常要用到dataframe的数据筛选功能,这里做个小结。

数据有以下的格式:

columns = [“blockNumber”,“timestamp”,“transactionHash”,“from”,“to”,“creates”,……“isError”]

数据筛选基本格式

初级筛选:

==, !=, >, >=, <, <=

主要用于简单的判断

contains

选取"from"列数据,最后一位为0或a的数据。(数据类型默认str)

data[data['from'].str[-1:].str.contains('0|a')]

contains语句中,可以以’|'符号为分割,添加多个候选项。

这里由于要只选最后一位,需要使用两次 str 方法。

isin

已有一个取值数组,目标是选择数据中,"from"数据的值在取值数组内的数据

targetList = ['0x12','0x1a','0x98', ... , '0x82']
data[data['from'].isin(targetList)]

这里targetList最好保持list的数据类型,使用pandas.Series可能会有意外的错误

反过来,如果目标是选择数据中,"from"数据的值不在取值数组内的数据

targetList = ['0x12','0x1a','0x98', ... , '0x82']
data[`data['from'].isin(targetList)]

仔细注意,这里是在前面加个反引号 ` ,通过反引号来表示取反

多个条件与或

选取的是数据中,"from"列数据的取值在目标数组内,或者"to"列数据取值最后一位为0或a的数据

targetList = ['0x12','0x1a','0x98', ... , '0x82']
data[(data['from'].isin(targetList)) | (data['to'].str[-1:].str.contains('0|a'))]

选取的是数据中,"from"列数据的取值在目标数组内,并且"to"列数据最后一位为0或a的数据

targetList = ['0x12','0x1a','0x98', ... , '0x82']
data[(data['from'].isin(targetList)) & (data['to'].str[-1:].str.contains('0|a'))]

如果是多个条件并列在一起,每个条件都需要用括号括起来。

数据筛选进阶

这里主要介绍一些,跟数据库操作相似的数据筛选,假设数据格式如下:

columns = ['from', 'to', 'weight'] # from,to 都是 str数据,weight是 int 数据

groupby

这里,假设一个需求是,统计from中的值,出现的次数,我们很容易想到可以通过value_counts() 方法直接获取:

pd.DataFrame(data['from'].value_counts())

这里value_counts()得到的是一个pandas.Series
那么更进一步,如果想知道"from"中的每个取值,对应的"to"取值跟"weight"取值分别是多少,可以使用:

pd.DataFrame(data.groupby('from'))

agg

如果要统计的是 from 中的值,每个值对应的weight总和是多少,这时候需要使用到groupbyagg

pd.DataFrame(data.groupby('from').agg('sum'))

np.where

假设现在的需求是,将from跟to的数据,每一行按照 from > to 的顺序交换(注意不是整列交换)。这时可以使用np.where实现。

    data['from'], data['to']= np.where(
                    data['from'] > data['to'], 
                    [data['to'], data['from']], 
                    [data['from'], data['to']])

np.where使用格式是:

np.where(condition, Yes, No)

conditionTrue时,取值为Yes,为False时,取值是No

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值