目錄
篩選行
一、過濾機制 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)