python dataframe如何選擇某一列非空的行
dataframe選擇某一列非空的行
如下所示:
data 為 dataframe 對象 col 為對應(yīng)的列
def get_not_null_data(data, col): data = data[(data[col].notnull()) & (data[col] != "")] return data
dataframe常用方法
【Series】
性質(zhì):一維數(shù)組對象,類似NumPy 的一維array。
除了包含一組數(shù)據(jù)還包含一組索引,所以可以把它理解為一組帶索引的數(shù)組。
obj = Series([1,2,3,4],index = [‘a(chǎn)','b','c','d']) #通過 index 參數(shù)顯示指定索引 obj.index obj.values #單獨獲取 Series 對象的索引或者數(shù)組內(nèi)容 obj*2 obj+1 obj[obj>10]#對Series對象的運算(索引不變)
【DataFrame】
性質(zhì):一個表格型的數(shù)據(jù)結(jié)構(gòu)。它提供有序的列和不同類型的列值。
創(chuàng)建:可以將一個{key:list[]}轉(zhuǎn)換成DataFrame,key為columns
DataFrame(data,columns = [‘col0','col1','col2'])#傳入columns參數(shù)指定列的順序
如果傳入的列名找不到,它不會報錯,而是產(chǎn)生一列 NA 值
獲取數(shù)據(jù):frame[‘col1’]frame.col1
刪除數(shù)據(jù):del frame[‘col1’]
【產(chǎn)生日期】
date_index = pd.date_range('11/19/2017', periods=10, freq='D')
常用方法
(1)reindex( )方法:重新索引
根據(jù)index參數(shù)重新進行排序。如果傳入的索引值在數(shù)據(jù)里不存在,則不會報錯,而是添加缺失值的新行。
不想用缺失值,可以用 fill_value 參數(shù)指定填充值。
e.gobj1 = obj.reindex([‘a(chǎn)','b','c'],fill_value = 0) #fill_value 會讓所有的缺失值都填充為同一個值,如果不想這樣而是用相鄰的元素(左或者右)的值填充,則可以用 method 參數(shù),可選的參數(shù)值為 ffill 和 bfill,分別為用前值填充和用后值填充。 e.g obj2 = obj.reindex(range(6),method = ‘ffill')
(2)drop() 方法:丟棄數(shù)據(jù)
data.drop([‘idx1','idx2'])#刪除行 data.drop([‘col1','col2'],axis = 1) #添加axis參數(shù)刪除列
(3)索引、選取和過濾
[注意]利用索引的切片運算與普通的 Python 切片運算不同,其末端是包含的,既包含最后一個的項。
e.gobj[‘b’:’d’]包含’d’,但是obj[1:3]不包含3
loc和iloc
df.loc[index,column_names]#知道column names 和index,且兩者都很好輸入 df.iloc[index,col_index]#column_name太長;index是時間序列不好輸入 i_index
ix操作:混合使用下標(biāo)和名稱進行選取
data.ix[‘idx',[‘col1','col2']] data.ix[2] #第2行 data.ix[data.col1<5,:3] # data.col1<5的前2列
(4)算術(shù)運算和數(shù)據(jù)對齊
1)Series:將2個對象相加時,具有重疊索引的索引值會相加處理;不重疊的索引則取并集,值為 NA;
2)對齊操作會同時發(fā)生在行和列上,把2個對象相加會得到一個新的對象,其索引為原來2個對象的索引的并集;和Series 對象一樣,不重疊的索引會取并集,值為 NA;如果不想這樣,試試使用 add() 方法進行數(shù)據(jù)
填充:
df1+df2 #會出現(xiàn)NaN df1.add(df2,fill_value = 0)#無NaN
(5)函數(shù)應(yīng)用和映射
df1.astype(np.int32) df2.apply(f) #f = lambda x:x+1
(6)排序
df.sort_index(ascending = False)frame.sort_index(axis = 1) Series: obj.sort_values()obj.sort_index()
排名
obj.rank(ascending = False) #索引位上的數(shù)的排名
帶有重復(fù)值的軸索引
obj.index.is_unique#False
索引時,同時輸出多個值
(7)匯總統(tǒng)計和計算
df.sum() #縱向匯總(行求和) aixs=1為橫向匯總 df.cumsum() #縱向匯總_累計匯總 df.idxmax() #獲取最大值對應(yīng)的索引 obj.unique() #返回數(shù)據(jù)里的唯一值array obj. value_counts()#統(tǒng)計各值出現(xiàn)的頻率,返回Series索引為值 obj. isin([‘c'])#判斷成員資格,在原表基礎(chǔ)上修正為bool
(8)處理缺失數(shù)據(jù)
使用isnull()和notnull()函數(shù)來判斷缺失情況。
對于缺失數(shù)據(jù)一般處理方法為濾掉或者填充。
濾除缺失數(shù)據(jù)
data.dropna() #返回一個包含非空數(shù)據(jù)和索引值的表,等價于data[data.notnull()] data.dropna(how = ‘a(chǎn)ll') #只有行里的數(shù)據(jù)全部為空時才丟棄,axis=1按列丟棄
填充缺失數(shù)據(jù)
df.fillna(0) #用默認(rèn)值填充缺失數(shù)據(jù) df.fillna({0:10,1:20,2:200})#可以傳入字典對不同的列填充不同的值(鍵表示列)
(9)層次化索引:能在一個數(shù)組上擁有多個索引,有點像Excel里的合并單元格
根據(jù)索引選擇數(shù)據(jù)子集
data[‘a(chǎn)'] #以外層索引的方式選擇數(shù)據(jù)子集 data[:,2] #以內(nèi)層索引的方式選擇數(shù)據(jù) data.unstack() #多重索引Series轉(zhuǎn)換為DataFrame,第二層索引為列
重排分級順序
df. swaplevel(‘idx1_name', ‘idx2_name')#將兩個級別的數(shù)據(jù)進行交換 df. sortlevel(0,ascending = False)#以行按第一層(0)進行排序 df. sortlevel(1,ascending = False,axis=1)#列按第二層(1)進行排序
根據(jù)級別匯總統(tǒng)計
多層次索引的數(shù)據(jù),匯總的時候可以單獨按照級別進行
df.sum(level='idx1_name')
(10)數(shù)據(jù)合并
a)pandas.merge():數(shù)據(jù)庫風(fēng)格的合并
pd.merge(df1,df2,on='col_coname') #以col_coname列當(dāng)作鍵,默認(rèn)內(nèi)連接(inner),即鍵的交集 pd.merge(df1,df2,on='col_coname',how=‘left')#左連接(left),右連接(right)和外連接[并集](outer) left.join(right) #以索引作為連接鍵
b)pandas.concat()方法:軸向連接,即沿著一條軸將多個對象堆疊到一起
pd.concat([s1,s2,s3]) #默認(rèn)concat在豎軸(axis=0)上連接,即產(chǎn)生新的Series。
c)實例方法combine_first()方法:合并重疊數(shù)據(jù)
s1.combine_first(s2) #等價于np.where(pd.isnull(s1),s2,s1)
這是一個矢量化的if-else操作,如果s1里某個位置上的數(shù)據(jù)為空,則用s2同位置上的元素來補,你可以理解為“打補丁”操作。
(11)數(shù)據(jù)重塑/軸向旋轉(zhuǎn)
重塑指的是將數(shù)據(jù)重新排列,也叫軸向旋轉(zhuǎn)。
stack: 將數(shù)據(jù)的列“旋轉(zhuǎn)”為行。unstack:將數(shù)據(jù)的行“旋轉(zhuǎn)”為列。
處理堆疊格式
堆疊格式也叫長格式,一般關(guān)系型數(shù)據(jù)庫存儲時間序列的數(shù)據(jù)會采用此種格式
df.pivot(‘col1','col2','col3')
(12)數(shù)據(jù)轉(zhuǎn)換:對數(shù)據(jù)的過濾、清理以及其他的轉(zhuǎn)換操作。
移除重復(fù)數(shù)據(jù)
df.duplicated() #檢測各行是否重復(fù),默認(rèn)判斷全部列,默認(rèn)保留第一個出現(xiàn)的值 df.duplicated([‘col1']) #判斷指定列 df.drop_duplicates() #丟棄重復(fù)行 df.drop_duplicates(keep=‘lost') #或傳入take_last=True保留最后一個值
利用映射進行數(shù)據(jù)轉(zhuǎn)換
data[‘new_col'] = data[‘col1'].map(col1_to_new_col)#map到一個dict data[‘col1'].map(lambda x: col1_to_new_col[x]) #等價于使用函數(shù)
替換值
data.replace(value,np.nan) data.replace([value1, value2],[ np.nan,0])
重命名軸索引
data.rename(index=str.title,columns=str.upper)
將數(shù)據(jù)劃分成不同的組
scores=[40,54,60,85,87,81] score_levels=[0,60,80,95] cats = pd.cut(scores,score_levels) #輸出內(nèi)容為區(qū)間的列表 pd.value_counts(cats) #統(tǒng)計區(qū)間個數(shù)
檢測和過濾異常值
data.decsribe() #產(chǎn)生數(shù)據(jù)的count,mean,std,min… data[np.abs(data)>2] #找出絕對值大于2的值,不滿足的為nan data[np.abs(data)>2.any(1)] #找出絕對值大于2的行 data[np.abs(data)>2]=0 #將異常值設(shè)置為0
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺析Python 實現(xiàn)一個自動化翻譯和替換的工具
這篇文章主要介紹了Python 實現(xiàn)一個自動化翻譯和替換的工具,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-04-04Python 數(shù)據(jù)處理更容易的12個輔助函數(shù)總結(jié)
Python的產(chǎn)生似乎就是專門用來處理數(shù)據(jù)的,順理成章的成為大數(shù)據(jù)的主流語言,本文介紹十二個函數(shù)輔助你更容易更便捷的用Python進行數(shù)據(jù)處理2021-11-11使用Django框架中ORM系統(tǒng)實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)增刪改查
這篇文章主要介紹了使用Django的ORM實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)增刪改查方法,文中附含詳細(xì)示例代碼以及過程詳解,有需要的朋友可以借鑒參考下2021-09-09python+selenium+Chrome options參數(shù)的使用
這篇文章主要介紹了python+selenium+Chrome options參數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03基于Opencv制作的美顏相機帶你領(lǐng)略美顏特效的效果
最關(guān)于美顏類相機最重要的是第一步:人臉檢測,本篇文章中是采用openCV開源庫實現(xiàn),文中給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值2021-09-09Pandas實現(xiàn)列(column)排序的幾種方法
Pandas是一種高效的數(shù)據(jù)處理庫,在數(shù)據(jù)處理過程中,咱們經(jīng)常需要將列按照一定的要求進行排序,本文就來介紹一下Pandas實現(xiàn)列(column)排序的幾種方法,感興趣的可以了解一下2023-11-11