日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pandas库简单入门

發布時間:2025/4/5 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pandas库简单入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注:關于pandas的相關問題,若本文未涉及可在下方留言告訴我,我會在文章中進行補充的

Ctrl+F 可進行全文查找

原文鏈接:https://mtyjkh.blog.csdn.net/article/details/84752080,歡迎轉載


文章目錄

  • 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按照某個字段進行拆分求和(groupby()函數)
  • 3 行列
    • 3.1 查找
      • 3.1.1 loc(按行\列標簽進行查找)
      • 3.1.2 iloc(按行\列號進行查找)
      • 3.1.3 查找含有特定值的行
    • 3.2 刪除
      • 3.2.1刪除特定數值的行
    • 3.3 修改
    • 3.4 排序
    • 3.5 轉置(行列轉換)
  • 4 索引
    • 4.1 更新
    • 4.2 設置
    • 4.3 重置
  • 5 重復項
    • 5.1 查看是否存在重復項
    • 5.2 刪除
  • 6 元素
    • 6.1 查找
    • 6.2 修改
  • 7 處理缺損數據
    • 7.1 dropna()方法
  • 8 實現數據分組求平均值

0 安裝

pip方式

pip install pandas

Anaconda

conda install pandas

1 文件

1.1 文件讀寫模式

以CSV文件的讀取為例,代碼如下

import pandas as pd #設置只讀模式 file_path = os.path.join("test.csv") data = pd.read_csv(open(file_path,'r',encoding='utf-8'),sep='|') mode描述
“r”打開,只讀。文件的指針將會放在文件的開頭。這是默認模式;
“w”打開,只寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件;
“a”打開,指向文件尾,在已存在文件中追加;
“rb”打開一個二進制文件,只讀;
“wb”打開一個二進制文件,只寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件;
“ab”打開一個二進制文件,進行追加 ;
“r+”以讀/寫方式打開一個已存在的文件;
“w+”以讀/寫方式建立一個新的文本文件。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件 ;
“a+”以讀/寫方式打開一個文件文件進行追加 ;
“rb+”以讀/寫方式打開一個二進制文件;
“wb+”以讀/寫方式建立一個新的二進制文件。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件
“ab+”以讀/寫方式打開一個二進制文件進行追加 ;

1.2 讀取CSV文件

import pandas as pd import os ? file_path = os.path.join("test.csv") #讀取test.csv文件中的A、B列,若不設置usecols參數,默認讀取全部數據。 data = pd.read_csv(open(file_path,'r',encoding='utf-8'),sep='|',usecols=["A","B"])

1.3 讀取excel文件

excel文件的讀取都可以用以下函數來實現

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)

參數詳解:

  • io:excel文件路徑;
  • sheetname:默認是sheetname為0,返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。注意:int/string返回的是dataframe,而none和list返回的是dict of dataframe。
  • header:指定作為列名的行,默認0,即取第一行,數據為列名行以下的數據;若數據不含列名,則設定 header = None;
  • skiprows:省略指定行數的數據,比如省略第三行,skiprows=2;
  • skip_footer:省略從尾部數的行數據
  • index_col:指定列為索引列;
  • names:指定列的名字,傳入一個list數據

1.4 讀取txt文件

這里使用read_table()函數。

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 """

函數原型:

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)

常用參數簡介:

  • filepath_or_buffer:文件路徑。
  • sep:分隔符,默認為\t。
  • header:用作列名的行號,默認為0(第一行),如果沒有header行就應該設置為None。
  • names:用于結果的列名列表,結合header=None。
  • skiprows:跳過指定行。
  • na_values:缺失值處理,na_values= ["null"],用null字符替換缺失值。
  • nrows:定需要讀取的行數:nrows = 100, 指定讀取前100行數據。

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}?#設置DataFrame中列的排列順序 #如果無需重命名,columns這一參數可以省略 dataFrame = pd.DataFrame(data_dict, columns=['a_name', 'b_name'])#將DataFrame存儲到csv文件中,index表示是否顯示行名,default=True dataFrame.to_csv("test.csv", index=False, sep='|') #如果希望在不覆蓋原文件內容的情況下將信息寫入文件,可以加上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數據。

for index, row in df.iterrows():print(row["column"])

2.3 合并(concat方法)

談到DataFrame數據的合并,一般用到的方法有concat、join、merge。
這里就介紹concat方法,以下是函數原型。

pd.concat(objs, axis=0, join=‘outer’, join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False)

參數說明 :
objs: series,dataFrame或者是panel構成的序列list。
axis: 需要合并鏈接的軸,0是行,1是列。
join: 連接的方式 inner,或者outer。

2.3.1 相同字段的表首尾相接

# 現將表構成list,然后在作為concat的輸入 frames = [df1, df2, df3] result = pd.concat(frames) #重置索引(index),不然后面容易出問題,我曾經因為這個找了一個上午的bug。 df = result.reset_index(drop=True)

2.3.2 橫向表拼接(行對齊)

特別注意: axis=1時,concat()的拼接是根據df.index來的,index相同的的行進行拼接。

2.3.2.1 axis參數說明

當axis = 1的時候,concat就是行對齊,然后將不同列名稱的兩張表合并。

result = pd.concat([df1, df4], axis=1)

2.3.2.2 join參數說明

加上join參數的屬性,如果為inner得到的是兩表的交集,如果是outer,得到的是兩表的并集。

result = pd.concat([df1, df4], axis=1, join='inner')

2.3.2.3 join_axes參數說明

如果有join_axes的參數傳入,可以指定根據那個軸來對齊數據
例如根據df1表對齊數據,就會保留指定的df1表的軸,然后將df4的表與之拼接

result = pd.concat([df1, df4], axis=1, join_axes=[df1.index])

2.4 將df按照某個字段進行拆分求和(groupby()函數)


如果我們需要將Datetime值相同的行進行合并(AEP_MW取這些行的和),可以這樣做

dataset_new_2 = dataset_new.groupby(by='Datetime')['AEP_MW'].sum()# 此時得到的dataset_new_2數據類型為Series,可以通過下面代碼轉化為DataFrame dict_dataset = {'Datetime':dataset_new_2.index,'AEP_MW':dataset_new_2.values} dataset_new_3 = pd.DataFrame(dict_dataset) dataset_new_3.head()

2004/10/1的AEP_MW為所有值的和

3 行列

3.1 查找

查找DataFrame數據類型中的某一(多)行(列)

這里記錄三個可以實現該功能的函數:loc、iloc、ix。

  • loc:通過標簽選取數據,即通過index和columns的值進行選取。loc方法有兩個參數,按順序控制行列選取。
  • iloc:通過行號選取數據,即通過數據所在的自然行列數為選取數據。iloc方法也有兩個參數,按順序控制行列選取。
  • ix:混合索引,同時通過標簽和行號選取數據。ix方法也有兩個參數,按順序控制行列選取。

代碼示例如下:

#df數據a b c d 0 1 2 e 3 4 5 f 6 7 8 g 9 10 11

3.1.1 loc(按行\列標簽進行查找)

通過標簽選取數據,即通過index和columns的值進行選取。loc方法有兩個參數,按順序控制行列選取。

#1.定位單行 df.loc['e'] #df數據參考上文 ''' 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(按行\列號進行查找)

通過行號選取數據,即通過數據所在的自然行列數為選取數據。iloc方法也有兩個參數,按順序控制行列選取。

#1.定位單行 df.iloc[1] #df數據參考上文 ''' 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刪除特定數值的行

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)#通過~取反,選取不包含數字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)

函數原型:

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’)

列舉常用的參數用法:

  • by:函數的操作對象是DataFrame
  • axis:進行操作的列名,多個列名用列表表示
  • ascending:默認為升序True
#dataFrame: '''col1 col2 col3 0 A 2 0 1 A 1 1 2 B 9 9 3 NaN 8 4 4 D 7 2 5 C 4 3 ''' df = df.sort_values(by=['col1']) ''' 輸出:col1 col2 col3 0 A 2 0 1 A 1 1 2 B 9 9 5 C 4 3 4 D 7 2 3 NaN 8 4 '''

3.5 轉置(行列轉換)

將dataFrame原先的行變成列,將原先的列變為行

df = df.T

4 索引

  • reindex()
    更新index或者columns,
    默認:更新index,返回一個新的DataFrame

  • set_index()
    將DataFrame中的列columns設置成索引index
    打造層次化索引的方法

  • reset_index()
    將使用set_index()打造的層次化逆向操作
    既是取消層次化索引,將索引變回列,并補上最常規的數字索引

詳細講解:

4.1 更新

reindex():更新index或者columns。
默認:更新index,返回一個新的DataFrame。

# 返回一個新的DataFrame,更新index,原來的index會被替代消失 # 如果dataframe中某個索引值不存在,會自動補上NaN df2 = df1.reindex(['a','b','c','d','e'])# fill_valuse為原先不存在的索引補上默認值,不再是NaN df2 = df1.reindex(['a','b','c','d','e'], fill_value=0)# inplace=Ture,在DataFrame上修改數據,而不是返回一個新的DataFrame df1.reindex(['a','b','c','d','e'], inplace=Ture)# reindex不僅可以修改 索引(行),也可以修改列 states = ["columns_a","columns_b","columns_c"] df2 = df1.reindex( columns=states )

4.2 設置

set_index():將DataFrame中的列columns設置成索引index。
打造層次化索引的方法。

# 將columns中的其中兩列:race和sex的值設置索引,race為一級,sex為二級 # inplace=True 在原數據集上修改的 adult.set_index(['race','sex'], inplace = True) # 默認情況下,設置成索引的列會從DataFrame中移除 # drop=False將其保留下來 adult.set_index(['race','sex'], drop=False)

4.3 重置

reset_index():將使用set_index()打造的層次化逆向操作。
既是取消層次化索引,將索引變回列,并補上最常規的數字索引。

df.reset_index()

5 重復項

5.1 查看是否存在重復項

DataFrame的duplicated方法返回一個布爾型Series,表示各行是否重復行。

a = df.duplicated()

5.2 刪除

而 drop_duplicates方法,它用于返回一個移除了重復行的DataFrame

#去掉A_ID和B_ID重復的行,并保留第一次出現的行 df = df.drop_duplicates(subset=['A_ID', 'B_ID'], keep='first')
  • 當keep=False時,就是去掉所有的重復行
  • 當keep='first’時,就是保留第一次出現的重復行
  • 當keep='last’時就是保留最后一次出現的重復行。

6 元素

6.1 查找

通過標簽或行號獲取某個數值的具體位置(DataFrame數據類型中)

#DataFrame數據a b c d 0 1 2 e 3 4 5 f 6 7 8 g 9 10 11 #獲取第2行,第3列位置的數據 df.iat[1,2] Out[205]: 5#獲取f行,a列位置的數據 df.at['f','a'] Out[206]: 6 ''' iat:依據行號定位 at:依舊標簽定位 '''

6.2 修改

修改DataFrame中的某一元素

df['列名'][行序號(index)] = "新數據"

7 處理缺損數據

7.1 dropna()方法

該方法用于檢查是否存在缺損數據,若存在則刪除相關列與行。
函數原型:

pd.dropna(axis=0, how=any, thresh=None, subset=None, inplace=False)

參數說明:

  • axis: 該參數確定是刪除包含缺失值的行或列, axis=0或axis='index’刪除含有缺失值的行,axis=1或axis='columns’刪除含有缺失值的列。
  • how:any存在即nan即丟棄,all全部為nan才丟棄。
  • thresh:默認值 None值,thresh=n則表明每行至少n的非NaN值,否則則刪除該行。
  • subset:定義要在哪些列中查找缺失值。
  • inplace:默認值 False,是否直接在原DataFrame進行修改。

8 實現數據分組求平均值

#求type1Name下屬所有類別名 type1Name = df.type1Name.unique()#輸出每個類別A值的平均值 for type1 in type1Name:t = df.type1Name.A == type1print(df[t].mean())

總結

以上是生活随笔為你收集整理的pandas库简单入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品国产乱码久久久久久预案 | 日日夜夜免费精品视频 | 成人区一区二区 | 精品少妇一区二区三区密爱 | 无码国产精品久久一区免费 | 91水蜜桃 | 日韩一区二区三区四区五区六区 | 自拍偷拍欧美激情 | 精品人妻无码一区二区三区 | 91大神在线免费观看 | 黄色三级网站在线观看 | 日韩一区二区高清视频 | 免费日韩网站 | 在线看免费av | 欧美日韩高清免费 | 日韩成人精品一区二区三区 | 窝窝视频在线 | 成人网站免费观看入口 | 天天干夜操 | 国产一级网站 | 国产成人久久精品麻豆二区 | 亚洲国产精品成人综合色在线婷婷 | 韩国日本中文字幕 | av一级网站| 日韩激情电影在线 | 欧美一级片观看 | 日本精品一区在线观看 | 日日操狠狠操 | 久久久久久久国产 | 久久免费电影 | 色涩网站 | 日韩中文字幕第一页 | 中出中文字幕 | 激情噜噜 | 69久久| 国产精品一区免费观看 | 欧美色图一区 | 50部乳奶水在线播放 | 青青青草国产 | 伊人中文在线 | 91麻豆蜜桃| 97视频免费观看 | ass日本粉嫩pics珍品 | 五月婷网站 | 91在线无精精品一区二区 | 老司机深夜网站 | 中文字幕精品一区 | 91干网 | 国产亚洲色婷婷久久99精品 | 夜夜爱爱| 亚洲国产精品久久久久婷婷老年 | 精品无码成人久久久久久免费 | 国产精品偷伦视频免费看 | 樱花视频在线免费观看 | 久操免费在线视频 | 日本亲子乱子伦xxxx50路 | a级片在线看 | 天天摸天天干天天操 | 情五月 | 国产成人欧美 | 亚洲人女屁股眼交6 | 欧美一线高本道 | 少妇欧美激情一区二区三区 | 在线观看国产91 | 免费一级欧美片在线播放 | 欧美日本三级 | 屁股夹体温计调教play | 另类尿喷潮videofree | 国产做受69| 国产第8页 | 久综合 | 中文字幕在线视频精品 | av鲁丝一区鲁丝二区鲁丝三区 | 国产精品自产拍在线观看 | 一本免费视频 | 福利视频导航网 | 色婷婷久久久亚洲一区二区三区 | 人妻互换一区二区三区四区五区 | 欧美vieox另类极品 | 亚洲成年人网站在线观看 | 婷婷国产一区 | 波多野结衣视频在线播放 | 亚洲日本国产 | 日本中文字幕成人 | 日本高清免费观看 | 99re国产精品| 日日天天干 | 在线天堂网 | 美女131爽爽爽| 色女人影院 | 9l视频自拍九色9l视频成人 | 热久久精品 | 日韩中文字幕免费观看 | 日日躁夜夜躁aaaabbbb | 国产高清一区二区 | 99国产精 | 亚洲美女视频网站 | 亚洲论理 | 久久三级 |