DataFrame 数据筛选
pandas DataFrame 數(shù)據(jù)篩選
- DataFrame 數(shù)據(jù)篩選
- 數(shù)據(jù)篩選基本格式
- contains
- isin
- 多個(gè)條件與或
- 數(shù)據(jù)篩選進(jìn)階
- groupby
- agg
- np.where
DataFrame 數(shù)據(jù)篩選
近期使用pandas比較頻繁,在進(jìn)行數(shù)據(jù)處理的時(shí)候經(jīng)常要用到dataframe的數(shù)據(jù)篩選功能,這里做個(gè)小結(jié)。
數(shù)據(jù)有以下的格式:
columns = [“blockNumber”,“timestamp”,“transactionHash”,“from”,“to”,“creates”,……“isError”]
數(shù)據(jù)篩選基本格式
初級(jí)篩選:
==, !=, >, >=, <, <=
主要用于簡(jiǎn)單的判斷
contains
選取"from"列數(shù)據(jù),最后一位為0或a的數(shù)據(jù)。(數(shù)據(jù)類(lèi)型默認(rèn)str)
data[data['from'].str[-1:].str.contains('0|a')]contains語(yǔ)句中,可以以’|'符號(hào)為分割,添加多個(gè)候選項(xiàng)。
這里由于要只選最后一位,需要使用兩次 str 方法。
isin
已有一個(gè)取值數(shù)組,目標(biāo)是選擇數(shù)據(jù)中,"from"數(shù)據(jù)的值在取值數(shù)組內(nèi)的數(shù)據(jù)
targetList = ['0x12','0x1a','0x98', ... , '0x82'] data[data['from'].isin(targetList)]這里targetList最好保持list的數(shù)據(jù)類(lèi)型,使用pandas.Series可能會(huì)有意外的錯(cuò)誤
反過(guò)來(lái),如果目標(biāo)是選擇數(shù)據(jù)中,"from"數(shù)據(jù)的值不在取值數(shù)組內(nèi)的數(shù)據(jù)
targetList = ['0x12','0x1a','0x98', ... , '0x82'] data[`data['from'].isin(targetList)]仔細(xì)注意,這里是在前面加個(gè)反引號(hào) ` ,通過(guò)反引號(hào)來(lái)表示取反
多個(gè)條件與或
選取的是數(shù)據(jù)中,"from"列數(shù)據(jù)的取值在目標(biāo)數(shù)組內(nèi),或者"to"列數(shù)據(jù)取值最后一位為0或a的數(shù)據(jù)
targetList = ['0x12','0x1a','0x98', ... , '0x82'] data[(data['from'].isin(targetList)) | (data['to'].str[-1:].str.contains('0|a'))]選取的是數(shù)據(jù)中,"from"列數(shù)據(jù)的取值在目標(biāo)數(shù)組內(nèi),并且"to"列數(shù)據(jù)最后一位為0或a的數(shù)據(jù)
targetList = ['0x12','0x1a','0x98', ... , '0x82'] data[(data['from'].isin(targetList)) & (data['to'].str[-1:].str.contains('0|a'))]如果是多個(gè)條件并列在一起,每個(gè)條件都需要用括號(hào)括起來(lái)。
數(shù)據(jù)篩選進(jìn)階
這里主要介紹一些,跟數(shù)據(jù)庫(kù)操作相似的數(shù)據(jù)篩選,假設(shè)數(shù)據(jù)格式如下:
columns = ['from', 'to', 'weight'] # from,to 都是 str數(shù)據(jù),weight是 int 數(shù)據(jù)groupby
這里,假設(shè)一個(gè)需求是,統(tǒng)計(jì)from中的值,出現(xiàn)的次數(shù),我們很容易想到可以通過(guò)value_counts() 方法直接獲取:
pd.DataFrame(data['from'].value_counts())這里value_counts()得到的是一個(gè)pandas.Series
那么更進(jìn)一步,如果想知道"from"中的每個(gè)取值,對(duì)應(yīng)的"to"取值跟"weight"取值分別是多少,可以使用:
agg
如果要統(tǒng)計(jì)的是 from 中的值,每個(gè)值對(duì)應(yīng)的weight總和是多少,這時(shí)候需要使用到groupby跟agg
pd.DataFrame(data.groupby('from').agg('sum'))np.where
假設(shè)現(xiàn)在的需求是,將from跟to的數(shù)據(jù),每一行按照 from > to 的順序交換(注意不是整列交換)。這時(shí)可以使用np.where實(shí)現(xiàn)。
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)condition 為T(mén)rue時(shí),取值為Yes,為False時(shí),取值是No
總結(jié)
以上是生活随笔為你收集整理的DataFrame 数据筛选的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【计算机视觉】双目测距(二)--双目标定
- 下一篇: 忘记了电脑登陆密码,只记得PIN密码时可