pandas數(shù)據(jù)清洗,排序,索引設(shè)置,數(shù)據(jù)選取方法
此教程適合有pandas基礎(chǔ)的童鞋來(lái)看,很多知識(shí)點(diǎn)會(huì)一筆帶過(guò),不做詳細(xì)解釋
Pandas數(shù)據(jù)格式
Series
DataFrame:每個(gè)column就是一個(gè)Series
基礎(chǔ)屬性shape,index,columns,values,dtypes,describe(),head(),tail()
統(tǒng)計(jì)屬性Series: count(),value_counts(),前者是統(tǒng)計(jì)總數(shù),后者統(tǒng)計(jì)各自value的總數(shù)
df.isnull() df的空值為True
df.notnull() df的非空值為True
修改列名
df.rename(columns = {'key':'key2'},inplace=True)
更改數(shù)據(jù)格式astype()
isin #計(jì)算一個(gè)“Series各值是否包含傳入的值序列中”的布爾數(shù)組 unique #返回唯一值的數(shù)組 value_counts #返回一個(gè)Series,其索引為唯一值,值為頻率,按計(jì)數(shù)降序排列
數(shù)據(jù)清洗
丟棄值drop()
df.drop(labels, axis=1)# 按列(axis=1),丟棄指定label的列,默認(rèn)按行。。。
丟棄缺失值dropna()
# 默認(rèn)axi=0(行);1(列),how=‘a(chǎn)ny' df.dropna()#每行只要有空值,就將這行刪除 df.dropna(axis=1)#每列只要有空值,整列丟棄 df.dropna(how='all')# 一行中全部為NaN的,才丟棄該行 df.dropna(thresh=3)# 每行至少3個(gè)非空值才保留
缺失值填充fillna()
df.fillna(0) df.fillna({1:0,2:0.5}) #對(duì)第一列nan值賦0,第二列賦值0.5 df.fillna(method='ffill') #在列方向上以前一個(gè)值作為值賦給NaN
值替換replace()
# 將df的A列中 -999 全部替換成空值 df['A'].replace(-999, np.nan) #-999和1000 均替換成空值 obj.replace([-999,1000], np.nan) # -999替換成空值,1000替換成0 obj.replace([-999,1000], [np.nan, 0]) # 同上,寫法不同,更清晰 obj.replace({-999:np.nan, 1000:0})
重復(fù)值處理duplicated(),unique(),drop_duplictad()
df.duplicated()#兩行每列完全一樣才算重復(fù),后面重復(fù)的為True,第一個(gè)和不重復(fù)的為false,返回true #和false組成的Series類型 df.duplicated('key')#兩行key這一列一樣就算重復(fù) df['A'].unique()# 返回唯一值的數(shù)組(類型為array) df.drop_duplicates(['k1'])# 保留k1列中的唯一值的行,默認(rèn)保留第一行 df.drop_duplicates(['k1','k2'], take_last=True)# 保留 k1和k2 組合的唯一值的行,take_last=True 保留最后一行
排序
索引排序
# 默認(rèn)axis=0,按行索引對(duì)行進(jìn)行排序;ascending=True,升序排序 df.sort_index() # 按列名對(duì)列進(jìn)行排序,ascending=False 降序 df.sort_index(axis=1, ascending=False)
值排序
# 按值對(duì)Series進(jìn)行排序,使用order(),默認(rèn)空值會(huì)置于尾部 s = pd.Series([4, 6, np.nan, 2, np.nan]) s.order() df.sort_values(by=['a','b'])#按列進(jìn)行排序
排名
a=Series([7,-5,7,4,2,0,4]) a.rank()#默認(rèn)method='average',升序排名(ascending=True),按行(axis=0) #average 值相等時(shí),取排名的平均值 #min 值相等時(shí),取排名最小值 #max 值相等時(shí),取排名最大值 #first值相等時(shí),按原始數(shù)據(jù)出現(xiàn)順序排名
索引設(shè)置
reindex()
更新index或者columns,
默認(rèn):更新index,返回一個(gè)新的DataFrame
# 返回一個(gè)新的DataFrame,更新index,原來(lái)的index會(huì)被替代消失 # 如果dataframe中某個(gè)索引值不存在,會(huì)自動(dòng)補(bǔ)上NaN df2 = df1.reindex(['a','b','c','d','e']) # fill_valuse為原先不存在的索引補(bǔ)上默認(rèn)值,不在是NaN df2 = df1.reindex(['a','b','c','d','e'], fill_value=0) # inplace=Ture,在DataFrame上修改數(shù)據(jù),而不是返回一個(gè)新的DataFrame df1.reindex(['a','b','c','d','e'], inplace=Ture) # reindex不僅可以修改 索引(行),也可以修改列 states = ["Texas","Utah","California"] df2 = df1.reindex( columns=states )
set_index()
將DataFrame中的列columns設(shè)置成索引index
打造層次化索引的方法
# 將columns中的其中兩列:race和sex的值設(shè)置索引,race為一級(jí),sex為二級(jí) # inplace=True 在原數(shù)據(jù)集上修改的 adult.set_index(['race','sex'], inplace = True) # 默認(rèn)情況下,設(shè)置成索引的列會(huì)從DataFrame中移除 # drop=False將其保留下來(lái) adult.set_index(['race','sex'], inplace = True)
reset_index()
將使用set_index()打造的層次化逆向操作
既是取消層次化索引,將索引變回列,并補(bǔ)上最常規(guī)的數(shù)字索引
df.reset_index()
數(shù)據(jù)選取
[]
只能對(duì)行進(jìn) 行(row/index) 切片,前閉后開(kāi)df[0:3],df[:4],df[4:]
where 布爾查找
df[df["A"]>7]
isin
# 返回布爾值 s.isin([1,2,3]) df['A'].isin([1,2,3]) df.loc[df['A'].isin([5.8,5.1])]選取列A中值為5.8,5.1的所有行組成dataframe
query
多個(gè)where整合切片,&:于,|:或
df.query(" A>5.0 & (B>3.5 | C<1.0) ")
loc :根據(jù)名稱Label切片
# df.loc[A,B] A是行范圍,B是列范圍 df.loc[1:4,['petal_length','petal_width']] # 需求1:創(chuàng)建一個(gè)新的變量 test # 如果sepal_length > 3 test = 1 否則 test = 0 df.loc[df['sepal_length'] > 6, 'test'] = 1 df.loc[df['sepal_length'] <=6, 'test'] = 0 # 需求2:創(chuàng)建一個(gè)新變量test2 # 1.petal_length>2 and petal_width>0.3 = 1 # 2.sepeal_length>6 and sepal_width>3 = 2 3.其他 = 0 df['test2'] = 0 df.loc[(df['petal_length']>2)&(df['petal_width']>0.3), 'test2'] = 1 df.loc[(df['sepal_length']>6)&(df['sepal_width']>3), 'test2'] = 2
iloc:切位置
df.iloc[1:4,:]
ix:混切
名稱和位置混切,但效率低,少用
df1.ix[0:3,['sepal_length','petal_width']]
map與lambda
alist = [1,2,3,4] map(lambda s : s+1, alist)#map就是將自定義函數(shù)應(yīng)用于Series每個(gè)元素 df['sepal_length'].map(lambda s:s*2+1)[0:3]
apply和applymap
apply和applymap是對(duì)dataframe的操作,前者操作一行或者一列,后者操作每個(gè)元素 These are techniques to apply function to element, column or dataframe. Map: It iterates over each element of a series. df[‘column1'].map(lambda x: 10+x), this will add 10 to each element of column1. df[‘column2'].map(lambda x: ‘AV'+x), this will concatenate “AV“ at the beginning of each element of column2 (column format is string). Apply: As the name suggests, applies a function along any axis of the DataFrame. df[[‘column1','column2']].apply(sum), it will returns the sum of all the values of column1 and column2. df0[['data1']].apply(lambda s:s+1) ApplyMap: 對(duì)dataframe的每一個(gè)元素施加一個(gè)函數(shù) func = lambda x: x+2 df.applymap(func), dataframe每個(gè)元素加2 (所有列必須數(shù)字類型)
contains
# 使用DataFrame模糊篩選數(shù)據(jù)(類似SQL中的LIKE) # 使用正則表達(dá)式進(jìn)行模糊匹配,*匹配0或無(wú)限次,?匹配0或1次 df_obj[df_obj['套餐'].str.contains(r'.*?語(yǔ)音CDMA.*')] # 下面兩句效果一致 df[df['商品名稱'].str.contains("四件套")] df[df['商品名稱'].str.contains(r".*四件套.*")]
以上這篇pandas數(shù)據(jù)清洗,排序,索引設(shè)置,數(shù)據(jù)選取方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 基于pandas數(shù)據(jù)清洗的實(shí)現(xiàn)示例
- 利用pandas進(jìn)行數(shù)據(jù)清洗的7種方式
- Pandas數(shù)據(jù)清洗和預(yù)處理的實(shí)現(xiàn)示例
- Pandas數(shù)據(jù)清洗的實(shí)現(xiàn)
- Python數(shù)據(jù)清洗之利用pandas篩選數(shù)據(jù)詳解
- Pandas數(shù)據(jù)清洗函數(shù)總結(jié)
- pandas數(shù)據(jù)清洗(缺失值和重復(fù)值的處理)
- pandas數(shù)據(jù)清洗實(shí)現(xiàn)刪除的項(xiàng)目實(shí)踐
- 詳解Python如何利用Pandas與NumPy進(jìn)行數(shù)據(jù)清洗
- 利用pandas進(jìn)行數(shù)據(jù)清洗的方法
- Pandas 數(shù)據(jù)處理,數(shù)據(jù)清洗詳解
相關(guān)文章
python微信公眾號(hào)開(kāi)發(fā)簡(jiǎn)單流程
這篇文章主要介紹了python微信公眾號(hào)開(kāi)發(fā)的相關(guān)資料,分步驟為大家分享python微信公眾號(hào)開(kāi)發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03pyecharts如何使用formatter回調(diào)函數(shù)的問(wèn)題
這篇文章主要介紹了pyecharts如何使用formatter回調(diào)函數(shù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Python實(shí)現(xiàn)分?jǐn)?shù)序列求和
今天小編就為大家分享一篇Python實(shí)現(xiàn)分?jǐn)?shù)序列求和,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02python網(wǎng)絡(luò)編程之多線程同時(shí)接受和發(fā)送
這篇文章主要為大家詳細(xì)介紹了python網(wǎng)絡(luò)編程之多線程同時(shí)接受和發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09解決pycharm導(dǎo)入本地py文件時(shí),模塊下方出現(xiàn)紅色波浪線的問(wèn)題
這篇文章主要介紹了解決pycharm導(dǎo)入本地py文件時(shí),模塊下方出現(xiàn)紅色波浪線的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06簡(jiǎn)介Python中用于處理字符串的center()方法
這篇文章主要介紹了簡(jiǎn)介Python中用于處理字符串的center()方法,是Python入門中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05