Dataframe 按條件選取行

2021-08-25 11:38:43 字數 2692 閱讀 9024

**:

我們說excel好用,在處理大型資料**的時候,excel可以非常方便地進行篩選。那麼pandas是否有類似的功能呢?答案是肯定的。下面介紹的幾個操作,返回的型別都是dataframe,因此可以進行巢狀操作,非常方便。

一、選取幾列組成新的dataframe:

df = df[['a列列明', 's列列明', 'h列列明']]

二、選取某列'status'裡面元素為"active"的行,即刪掉列status元素不是active的行

df = df[df['status'] == "active"]

(單項條件搜尋,類似select all where df.status = active)

三、選取'badthing'列為元素空的行,既badthing這列有內容的行全部去掉,組成乙個新的dataframe

df = df[df['badthing'].isnull()]

(空值搜尋)

四、選取goodreason列元素為列表['quality', 'cheap']內元素的行

df = df[df['goodreason'].isin(['quality', 'cheap'])]

(多項條件搜尋,類似select all where df.goodreason= quality and cheap)

五、分組並進行遍歷,運用groupby和for:

groupbynew = df.groupby('city', sort=false)

for name, groupdata in groupbynew:

# todo …… ……

如**所示,我們可以對dataframe以某列'city'進行分組。我們如何取出某組的資料呢?當然是用

for迴圈。取出來的name即是組名,而groupdata同樣是乙個dataframe,可以進行更進一步操作。

六、對series資料進行排序:

series= series.sort_values(ascending=false)  # 進行從大到小排序

高階:關於groupby的一些資訊:

在進行groupby運算後,直接列印會得乙個object資訊,新增groups引數後

print df.groupby(by=['city']).groups

列印出來會是帶group標籤和原資料行標籤(也就是原來dataframe裡面對應行的index)的組合資訊:

{'beijing': [25998l, 26134l, 26135l, 26235l, 26340l], 'shanghai': [33370l, 33426l, 33541l], 'chengdu': [26153l]

我們可以看到,按照groups來print,得出city為北京的情況下,對應原來的行標籤第25998行、26134行等

即使指定了某列:

print df.groupby(by=['city'])['quantity'].groups

依然會得出相同的結果:

{'beijing': [25998l, 26134l, 26135l, 26235l, 26340l], 'shanghai': [33370l, 33426l, 33541l], 'chengdu': [26153l]

print df.groupby(by=['city'])['quantity'].sum()

這樣就可以成功轉換成dataframe了:

city

beijing        5

shanghai  207

chengdu   518 ……

彙總說明如下:

print '----------new------------\n', type(df.groupby(by=['city']))

print '----------new------------\n', type(df.groupby(by=['city']).sum())

print '----------new------------\n', type(df.groupby(by=['city'])['quantity'])

print '----------new------------\n', type(df.groupby(by=['city'])['quantity'].sum())

所得結果為:

----------new------------

----------new------------

----------new------------

----------new------------

說明:乙個dataframe經過groupby以後得到的型別是pandas.core.groupby.dataframegroupby。而用for in迴圈取出的每個項的型別是pandas.core.frame.dataframe

乙個dataframe經過groupby再進行sum以後仍然是dataframe(不過具體通過那一列來sum有待考證)

乙個dataframe經過groupby以後再進行列選取,得到的是pandas.core.groupby.seriesgroupby型別。可知用for in迴圈取出的是pandas.core.series.series

乙個series經過groupby再進行sum以後仍然是series

DataFrame按多個條件刪除行

data.drop index data data 公司縮寫 row 1 data 發布時間 row 2 data 文章綜合情感 row 3 index for row in merge data12.itertuples 迴圈titledata每一行 a row 1 split print mer...

按概率隨機選取

據我了解,random.choice seq 是等概率選取乙個,不是我想要的。而numpy.random.choice seq,p,k 是按概率隨機重複選取多個,這正是我想要的。但是,我不想為這麼乙個函式引入巨大的numpy庫,所以打算自己實現乙個按概率隨機選取的函式。特此將 記錄如下 import...

按概率隨機選取

據我了解,random.choice seq 是等概率選取乙個,不是我想要的。而numpy.random.choice seq,p,k 是按概率隨機重複選取多個,這正是我想要的。但是,我不想為這麼乙個函式引入巨大的numpy庫,所以打算自己實現乙個按概率隨機選取的函式。特此將 記錄如下 import...