pandas库简单入门
注:關(guān)于pandas的相關(guān)問題,若本文未涉及可在下方留言告訴我,我會在文章中進(jìn)行補充的
Ctrl+F 可進(jìn)行全文查找
原文鏈接:https://mtyjkh.blog.csdn.net/article/details/84752080,歡迎轉(zhuǎn)載
文章目錄
- 0 安裝
- 1 文件
- 1.1 文件讀寫模式
- 1.2 讀取CSV文件
- 1.3 讀取excel文件
- 1.4 讀取txt文件
- 1.5 讀取JSON文件
- 1.6 寫入CSV文件
- 1.7 寫入JSON文件
- 2 DataFrame
- 2.1 獲取列名
- 2.2 遍歷
- 2.3 合并(concat方法)
- 2.4 將df按照某個字段進(jìn)行拆分求和(groupby()函數(shù))
- 3 行列
- 3.1 查找
- 3.1.1 loc(按行\(zhòng)列標(biāo)簽進(jìn)行查找)
- 3.1.2 iloc(按行\(zhòng)列號進(jìn)行查找)
- 3.1.3 查找含有特定值的行
- 3.2 刪除
- 3.2.1刪除特定數(shù)值的行
- 3.3 修改
- 3.4 排序
- 3.5 轉(zhuǎn)置(行列轉(zhuǎn)換)
- 4 索引
- 4.1 更新
- 4.2 設(shè)置
- 4.3 重置
- 5 重復(fù)項
- 5.1 查看是否存在重復(fù)項
- 5.2 刪除
- 6 元素
- 6.1 查找
- 6.2 修改
- 7 處理缺損數(shù)據(jù)
- 7.1 dropna()方法
- 8 實現(xiàn)數(shù)據(jù)分組求平均值
0 安裝
pip方式
pip install pandasAnaconda
conda install pandas1 文件
1.1 文件讀寫模式
以CSV文件的讀取為例,代碼如下
import pandas as pd #設(shè)置只讀模式 file_path = os.path.join("test.csv") data = pd.read_csv(open(file_path,'r',encoding='utf-8'),sep='|')| “r” | 打開,只讀。文件的指針將會放在文件的開頭。這是默認(rèn)模式; |
| “w” | 打開,只寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件; |
| “a” | 打開,指向文件尾,在已存在文件中追加; |
| “rb” | 打開一個二進(jìn)制文件,只讀; |
| “wb” | 打開一個二進(jìn)制文件,只寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件; |
| “ab” | 打開一個二進(jìn)制文件,進(jìn)行追加 ; |
| “r+” | 以讀/寫方式打開一個已存在的文件; |
| “w+” | 以讀/寫方式建立一個新的文本文件。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件 ; |
| “a+” | 以讀/寫方式打開一個文件文件進(jìn)行追加 ; |
| “rb+” | 以讀/寫方式打開一個二進(jìn)制文件; |
| “wb+” | 以讀/寫方式建立一個新的二進(jìn)制文件。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件 |
| “ab+” | 以讀/寫方式打開一個二進(jìn)制文件進(jìn)行追加 ; |
1.2 讀取CSV文件
import pandas as pd import os ? file_path = os.path.join("test.csv") #讀取test.csv文件中的A、B列,若不設(shè)置usecols參數(shù),默認(rèn)讀取全部數(shù)據(jù)。 data = pd.read_csv(open(file_path,'r',encoding='utf-8'),sep='|',usecols=["A","B"])1.3 讀取excel文件
excel文件的讀取都可以用以下函數(shù)來實現(xiàn)
pd.read_excel(io, sheetname=0,header=0,skiprows=None,index_col=None,names=None,arse_cols=None,date_parser=None,na_values=None,thousands=None, convert_float=True,has_index_names=None,converters=None,dtype=None,true_values=None,false_values=None,engine=None,squeeze=False,**kwds)參數(shù)詳解:
- io:excel文件路徑;
- sheetname:默認(rèn)是sheetname為0,返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。注意:int/string返回的是dataframe,而none和list返回的是dict of dataframe。
- header:指定作為列名的行,默認(rèn)0,即取第一行,數(shù)據(jù)為列名行以下的數(shù)據(jù);若數(shù)據(jù)不含列名,則設(shè)定 header = None;
- skiprows:省略指定行數(shù)的數(shù)據(jù),比如省略第三行,skiprows=2;
- skip_footer:省略從尾部數(shù)的行數(shù)據(jù)
- index_col:指定列為索引列;
- names:指定列的名字,傳入一個list數(shù)據(jù)
1.4 讀取txt文件
這里使用read_table()函數(shù)。
import pandas as pd data=pd.read_table('../data/datingTestSet2.txt',sep='\t',header=None) data.head() """ 輸出: 0 1 2 3 0 40920 8.326976 0.953952 3 1 14488 7.153469 1.673904 2 2 26052 1.441871 0.805124 1 3 75136 13.147394 0.428964 1 4 38344 1.669788 0.134296 1 """函數(shù)原型:
pandas.read_table(filepath_or_buffer,sep='\t',delimiter=None,header='infer',names=None,index_col=None,usecols=None,squeeze=False,prefix=None,mangle_dupe_cols=True,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skipinitialspace=False,skiprows=None,nrows=None,na_values=None,keep_default_na=True,na_filter=True,verbose=False,skip_blank_lines=True,parse_dates=False,infer_datetime_format=False,keep_date_col=False,date_parser=None,dayfirst=False,iterator=False,chunksize=None,compression='infer',thousands=None,decimal=b'.',lineterminator=None,quotechar='"',quoting=0,escapechar=None,comment=None,encoding=None,dialect=None,tupleize_cols=None,error_bad_lines=True,warn_bad_lines=True,skipfooter=0,doublequote=True,delim_whitespace=False,low_memory=True,memory_map=False,float_precision=None)常用參數(shù)簡介:
- filepath_or_buffer:文件路徑。
- sep:分隔符,默認(rèn)為\t。
- header:用作列名的行號,默認(rèn)為0(第一行),如果沒有header行就應(yīng)該設(shè)置為None。
- names:用于結(jié)果的列名列表,結(jié)合header=None。
- skiprows:跳過指定行。
- na_values:缺失值處理,na_values= ["null"],用null字符替換缺失值。
- nrows:定需要讀取的行數(shù):nrows = 100, 指定讀取前100行數(shù)據(jù)。
1.5 讀取JSON文件
import pandas as pddf = pd.read_json('frame.json')1.6 寫入CSV文件
#任意的多組列表 a = [1,2,3] b = [4,5,6] ? #字典中的key值即為csv中的列名 data_dict = {'a_name':a,'b_name':b}?#設(shè)置DataFrame中列的排列順序 #如果無需重命名,columns這一參數(shù)可以省略 dataFrame = pd.DataFrame(data_dict, columns=['a_name', 'b_name'])#將DataFrame存儲到csv文件中,index表示是否顯示行名,default=True dataFrame.to_csv("test.csv", index=False, sep='|') #如果希望在不覆蓋原文件內(nèi)容的情況下將信息寫入文件,可以加上mode="a" dataFrame.to_csv("test.csv", mode="a", index=False,sep='|')1.7 寫入JSON文件
import pandas as pd import numpy as npdf = pd.DataFrame(np.arange(16).reshape(4, 4),index=['onw', 'two', 'three', 'four'],columns=['A', 'B', 'C', 'D']) df.to_json('df.json')2 DataFrame
2.1 獲取列名
DataFrame.columns.values.tolist()2.2 遍歷
遍歷DataFrame數(shù)據(jù)。
for index, row in df.iterrows():print(row["column"])2.3 合并(concat方法)
談到DataFrame數(shù)據(jù)的合并,一般用到的方法有concat、join、merge。
這里就介紹concat方法,以下是函數(shù)原型。
pd.concat(objs, axis=0, join=‘outer’, join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False)
參數(shù)說明 :
objs: series,dataFrame或者是panel構(gòu)成的序列l(wèi)ist。
axis: 需要合并鏈接的軸,0是行,1是列。
join: 連接的方式 inner,或者outer。
2.3.1 相同字段的表首尾相接
# 現(xiàn)將表構(gòu)成list,然后在作為concat的輸入 frames = [df1, df2, df3] result = pd.concat(frames) #重置索引(index),不然后面容易出問題,我曾經(jīng)因為這個找了一個上午的bug。 df = result.reset_index(drop=True)2.3.2 橫向表拼接(行對齊)
特別注意: axis=1時,concat()的拼接是根據(jù)df.index來的,index相同的的行進(jìn)行拼接。
2.3.2.1 axis參數(shù)說明
當(dāng)axis = 1的時候,concat就是行對齊,然后將不同列名稱的兩張表合并。
result = pd.concat([df1, df4], axis=1)2.3.2.2 join參數(shù)說明
加上join參數(shù)的屬性,如果為inner得到的是兩表的交集,如果是outer,得到的是兩表的并集。
result = pd.concat([df1, df4], axis=1, join='inner')2.3.2.3 join_axes參數(shù)說明
如果有join_axes的參數(shù)傳入,可以指定根據(jù)那個軸來對齊數(shù)據(jù)
例如根據(jù)df1表對齊數(shù)據(jù),就會保留指定的df1表的軸,然后將df4的表與之拼接
2.4 將df按照某個字段進(jìn)行拆分求和(groupby()函數(shù))
如果我們需要將Datetime值相同的行進(jìn)行合并(AEP_MW取這些行的和),可以這樣做
2004/10/1的AEP_MW為所有值的和
3 行列
3.1 查找
查找DataFrame數(shù)據(jù)類型中的某一(多)行(列)
這里記錄三個可以實現(xiàn)該功能的函數(shù):loc、iloc、ix。
- loc:通過標(biāo)簽選取數(shù)據(jù),即通過index和columns的值進(jìn)行選取。loc方法有兩個參數(shù),按順序控制行列選取。
- iloc:通過行號選取數(shù)據(jù),即通過數(shù)據(jù)所在的自然行列數(shù)為選取數(shù)據(jù)。iloc方法也有兩個參數(shù),按順序控制行列選取。
- ix:混合索引,同時通過標(biāo)簽和行號選取數(shù)據(jù)。ix方法也有兩個參數(shù),按順序控制行列選取。
代碼示例如下:
#df數(shù)據(jù)a b c d 0 1 2 e 3 4 5 f 6 7 8 g 9 10 113.1.1 loc(按行\(zhòng)列標(biāo)簽進(jìn)行查找)
通過標(biāo)簽選取數(shù)據(jù),即通過index和columns的值進(jìn)行選取。loc方法有兩個參數(shù),按順序控制行列選取。
#1.定位單行 df.loc['e'] #df數(shù)據(jù)參考上文 ''' a 3 b 4 c 5 Name: e, dtype: int32 =================================== ''' #2.定位單列 df.loc[:,'a'] ''' d 0 e 3 f 6 g 9 Name: a, dtype: int32 =================================== ''' #3.定位多行 #方法一: df.loc['e':] '''a b c e 3 4 5 f 6 7 8 g 9 10 11 =================================== ''' #方法二 df.loc[['e','f','g']] '''a b c e 3 4 5 f 6 7 8 g 9 10 11 =================================== ''' #4.定位多行多列 #方法一: df.loc['e':,:'b'] '''a b e 3 4 f 6 7 g 9 10 =================================== ''' #方法二: df.loc['e':,['a','b']] '''a b e 3 4 f 6 7 g 9 10 =================================== '''3.1.2 iloc(按行\(zhòng)列號進(jìn)行查找)
通過行號選取數(shù)據(jù),即通過數(shù)據(jù)所在的自然行列數(shù)為選取數(shù)據(jù)。iloc方法也有兩個參數(shù),按順序控制行列選取。
#1.定位單行 df.iloc[1] #df數(shù)據(jù)參考上文 ''' a 3 b 4 c 5 Name: e, dtype: int32 =================================== ''' #2.定位單列 df.iloc[:,1] ''' d 1 e 4 f 7 g 10 Name: b, dtype: int32 =================================== ''' #3.定位多行 df.iloc[1:3] #或者df.iloc[[1,2,3]] '''a b c e 3 4 5 f 6 7 8 =================================== ''' #4.定義多行多列 df.iloc[1:3,1:2]#或者df.iloc[1:3,[1,2]] '''b e 4 f 7 =================================== '''3.1.3 查找含有特定值的行
import pandas as pd import numpy as npa=np.array([[1,2,3],[4,5,6],[7,8,9]]) df=pd.DataFrame(a,index=['row0','row1','row2'],columns=list('ABC')) print(df)#選取A為4的行 df=df[df['A'].isin([4])]print(df) """ 輸出A B C row0 1 2 3 row1 4 5 6 row2 7 8 9A B C row1 4 5 6 """3.2 刪除
刪除DataFrame中某一行
df.drop([16,17])3.2.1刪除特定數(shù)值的行
import pandas as pd import numpy as npa=np.array([[1,2,3],[4,5,6],[7,8,9]]) df=pd.DataFrame(a,index=['row0','row1','row2'],columns=list('ABC')) print(df)#通過~取反,選取不包含數(shù)字4的行 df=df[~df['A'].isin([4])]print(df) """ 輸出A B C row0 1 2 3 row1 4 5 6 row2 7 8 9A B C row0 1 2 3 row2 7 8 9 """3.3 修改
3.3.1 修改列名
df.columns = ['A','B','C']3.4 排序
df.sort_values(by="sales" , ascending=False)函數(shù)原型:
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’)
列舉常用的參數(shù)用法:
- by:函數(shù)的操作對象是DataFrame
- axis:進(jìn)行操作的列名,多個列名用列表表示
- ascending:默認(rèn)為升序True
3.5 轉(zhuǎn)置(行列轉(zhuǎn)換)
將dataFrame原先的行變成列,將原先的列變?yōu)樾?/p> df = df.T
4 索引
-
reindex()
更新index或者columns,
默認(rèn):更新index,返回一個新的DataFrame -
set_index()
將DataFrame中的列columns設(shè)置成索引index
打造層次化索引的方法 -
reset_index()
將使用set_index()打造的層次化逆向操作
既是取消層次化索引,將索引變回列,并補上最常規(guī)的數(shù)字索引
詳細(xì)講解:
4.1 更新
reindex():更新index或者columns。
默認(rèn):更新index,返回一個新的DataFrame。
4.2 設(shè)置
set_index():將DataFrame中的列columns設(shè)置成索引index。
打造層次化索引的方法。
4.3 重置
reset_index():將使用set_index()打造的層次化逆向操作。
既是取消層次化索引,將索引變回列,并補上最常規(guī)的數(shù)字索引。
5 重復(fù)項
5.1 查看是否存在重復(fù)項
DataFrame的duplicated方法返回一個布爾型Series,表示各行是否重復(fù)行。
a = df.duplicated()5.2 刪除
而 drop_duplicates方法,它用于返回一個移除了重復(fù)行的DataFrame
#去掉A_ID和B_ID重復(fù)的行,并保留第一次出現(xiàn)的行 df = df.drop_duplicates(subset=['A_ID', 'B_ID'], keep='first')- 當(dāng)keep=False時,就是去掉所有的重復(fù)行
- 當(dāng)keep='first’時,就是保留第一次出現(xiàn)的重復(fù)行
- 當(dāng)keep='last’時就是保留最后一次出現(xiàn)的重復(fù)行。
6 元素
6.1 查找
通過標(biāo)簽或行號獲取某個數(shù)值的具體位置(DataFrame數(shù)據(jù)類型中)
#DataFrame數(shù)據(jù)a b c d 0 1 2 e 3 4 5 f 6 7 8 g 9 10 11 #獲取第2行,第3列位置的數(shù)據(jù) df.iat[1,2] Out[205]: 5#獲取f行,a列位置的數(shù)據(jù) df.at['f','a'] Out[206]: 6 ''' iat:依據(jù)行號定位 at:依舊標(biāo)簽定位 '''6.2 修改
修改DataFrame中的某一元素
df['列名'][行序號(index)] = "新數(shù)據(jù)"7 處理缺損數(shù)據(jù)
7.1 dropna()方法
該方法用于檢查是否存在缺損數(shù)據(jù),若存在則刪除相關(guān)列與行。
函數(shù)原型:
參數(shù)說明:
- axis: 該參數(shù)確定是刪除包含缺失值的行或列, axis=0或axis='index’刪除含有缺失值的行,axis=1或axis='columns’刪除含有缺失值的列。
- how:any存在即nan即丟棄,all全部為nan才丟棄。
- thresh:默認(rèn)值 None值,thresh=n則表明每行至少n的非NaN值,否則則刪除該行。
- subset:定義要在哪些列中查找缺失值。
- inplace:默認(rèn)值 False,是否直接在原DataFrame進(jìn)行修改。
8 實現(xiàn)數(shù)據(jù)分組求平均值
#求type1Name下屬所有類別名 type1Name = df.type1Name.unique()#輸出每個類別A值的平均值 for type1 in type1Name:t = df.type1Name.A == type1print(df[t].mean())總結(jié)
以上是生活随笔為你收集整理的pandas库简单入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python学习中的点点滴滴
- 下一篇: 原始语料库