pandas行篩選/列篩選(條件篩選/范圍篩選)/計算


篩選行

一、過濾機制 dataframe[ 條件 ]

可以按照下列方法,依據列的值過濾DataFrame處理某些符合條件的行

dataframe[ dataframe["colname"] > value ]
dataframe[ dataframe["colname"] < value ]
dataframe[ dataframe["colname"] != value ]

二、推導過程

boolean_array =   dataframe["colname"] > value         ————>   Series type with bool values
dataframe[boolean_array]                               —————>  DataFrame filtered
dataframe[ dataframe["colname"] > value ]              —————>  DataFrame filtered

三、多條件過濾

dataframe[ dataframe["col1"] > val1 & dataframe["col2"] != val2] 

四、舉例

1、從記錄中選出所有fault_code列的值在fault_list= [487, 479, 500, 505]這個范圍內的記錄
record2=record[record['FAULT_CODE'].isin(fault_list)]

要用.isin 而不能用in,用 in以后選出來的值都是True 和False,然后報錯:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any()

2、選出所有WTGS_CODE=20004013的記錄

set=20004013
record= record[record['WTGS_CODE'] == set]


要點:
(1)多個條件篩選的時候每個條件都必須加括號。
(2)判斷值是否在某一個范圍內進行篩選的時候需要使用DataFrame.isin()的isin()函數,而不能使用in。

3、using DataFrame.apply, which applies a function along a given axis,

df = pandas.DataFrame(np.random.randn(5, 3), columns=['a', 'b', 'c'])
df: 
          a         b         c
0 -0.001968 -1.877945 -1.515674
1 -0.540628  0.793913 -0.983315
2 -1.313574  1.946410  0.826350
3  0.015763 -0.267860 -2.228350
4  0.563111  1.195459  0.343168

df[df.apply(lambda x: x['b'] > x['c'], axis=1)]
Out: 
          a         b         c
1 -0.540628  0.793913 -0.983315
2 -1.313574  1.946410  0.826350
3  0.015763 -0.267860 -2.228350
4  0.563111  1.195459  0.343168

or
mask = df.apply(lambda row: row["col"].val < 100, axis=1)
df[mask]

篩選列

從DataFrame里選擇幾個特定的列來組成新的df

假設,df有 col1-col20 一共20列,如果要從中選取幾列組成新的df:
df = [[col1,col2,col3,col4]]   #注意要用雙括號

假設df有兩種columns名稱, 一個是中文的col1,一個是英文的col2
可以把col1和col2先做成字典(不能有重復的),如下:
col_dict = dict(zip(col1,col2))

use_col = [c1,c2,c3,c4...]  #假設挑出來c1-c4..幾列來做過濾,要找對其對應的英文的列名:
use_col_en = []
#對於use_col里每一個i,在字典col_dict中遍歷得到相應的value,再添加到新的列表中,就得到了use_col_en
for i in use_col:
    v = col_dict[i]
    use_col_en.append(v)
    
df_new = df[use_col_en]      #使用use_col_en來過濾原表
df_new.columns = use_col      #將列名也替換

Dataframe 計算

兩個df相加(次序忽略,結果相同)

df_new = df1.add(df2,fill_value=0).fillna(0)

單個df按條件配號

import numpy as np
conditions = [c1,c2,c3,c4,c5,c6]      #其中,c1-c6是布爾表達式
values = [1,2,3,4,5,6]
df[column] = np.select(conditions, values)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM