1. 程式人生 > >pandas1-資料的增刪改查

pandas1-資料的增刪改查

文章目錄

核心資料結構

Series

Series可以理解為一個一維的陣列,只是index可以自己改動。類似於定長的有序字典,有Index和value。
建立:pd.Series(data,index=)。
列印的時候按照index賦值的順序,
index引數預設從0開始的整數,也是Series的絕對位置,即使index被賦值之後,絕對位置不會被覆蓋。
Series可以通過以下形式建立:
python的dict、 numpy當中的ndarray、 具體某個數值。index賦值必須是list型別。

s1=pd.Series(data: Any = None,
             index: Any = None,
             dtype: Optional[dtype] = None,
             name: Any = None,
             copy: Any = False,
             fastpath: bool = False)

例:

import pandas as pd
import numpy
data=[1,2,3]
index=["a","b","c"]
s1=pd.Series()
print
(s1) 結果: a 1 b 2 c 3

DataFrame

DataFrame是一個類似於表格的資料型別,有這樣一些引數:data (方框內的資料): numpy ndarray (structured or homogeneous), dict, or DataFrame

s1=pd.DataFrame(data: Any = None,
             index: Any = None,
             dtype: Optional[dtype] = None,
             name: Any = None,
             copy: Any = False,
             fastpath: bool = False)

index(行索引索引) : Index or array-like
columns (列索引): Index or array-like
dtype(data的資料型別) : dtype, default None
DataFrame可以理解為一個二維陣列,index有兩個維度,可更改。
例:

import pandas as pd
df = pd.DataFrame([['Snow', 'M', 22], ['Tyrion', 'M', 32], ['Sansa', 'F', 18], ['Arya', 'F', 14]],columns=['name', 'gender', 'age'])
結果:
     name gender  age
0    Snow      M   22
1  Tyrion      M   32
2   Sansa      F   18
3    Arya      F   14

資料查改

對資料操作簡單來說就是通過索引檢視:(1) 通過index對應的標籤;(2)通過絕對位置檢視。
如果通過絕對位置檢視,會使用s[XXX],XXX可以是絕對位置的數字,列表,或者表示式等。
基礎屬性
在這裡插入圖片描述

對Series操作

對Series操作簡單來說就是通過索引檢視:(1) 通過index對應的標籤;(2)通過絕對位置檢視。
如果通過絕對位置檢視,會使用s[XXX],XXX可以是絕對位置的數字,列表,或者表示式等

對DataFrame操作

對單列資料訪問

對單列資料的訪問:DataFrame的單列資料為一個Series。根據DataFrame的定義可以知曉DataFrame 是一個帶有標籤的二維陣列,每個標籤相當每一列的列名。df.a df[‘a’]

對多列資料訪問

對多列資料訪問:訪問DataFrame多列資料可以將多個列索引名稱視為一個列表,df[[‘a’,‘b’]]

對某幾行訪問

對某幾行訪問:

  • 如果只是需要訪問DataFrame某幾行資料的實現方式則採用陣列的選取方式,使用“:”,如df[1:3],只能分割一次
  • head和tail也可以得到多行資料,但是用這兩種方法得到的資料都是從開始或者末尾獲取的連續資料 。預設引數為訪問5行,只要在方法後方的“()”中填入訪問行數即可實現目標行數的檢視。

loc與iloc

loc方法是針對DataFrame索引名稱的切片方法,如果傳入的不是索引名稱,那麼切片操作將無法執行。 利用loc方法,能夠實現所有單層索引切片操作。loc方法使用方法如下。
DataFrame.loc[行索引名稱或條件,列索引名稱]

iloc和loc區別是iloc接收的必須是行索引和列索引的位置。iloc方法的使用方法如下。
DataFrame.iloc[行索引位置,列索引位置]

  • 使用loc方法和iloc實現多列切片,其原理的通俗解釋就是將多列的列名或者位置作為一個列表或者資料傳 入。
  • 使用loc,iloc方法可以取出DataFrame中的任意資料。
  • loc內部還可以傳入表示式,結果會返回滿足表示式的所有值。
  • loc更加靈活多變,程式碼的可讀性更高,iloc的程式碼簡潔,但可讀性不高。具體在資料分析工作中使用哪一 種方法,根據情況而定,大多數時候建議使用loc方法。
  • 在loc使用的時候內部傳入的行索引名稱如果為一個區間,則前後均為閉區間;iloc方法使用時內部傳入的 行索引位置或列索引位置為區間時,則為前閉後開區間。

ix方法

ix方法更像是loc和iloc兩種切片方法的融合。ix方法在使用時既可以接收索引名稱也可以接收索引位置。 其使用方法如下。
DataFrame.ix [行索引的名稱或位置或者條件,列索引名稱或位置]
使用ix方法時有個注意事項,第一條,當索引名稱和位置存在部分重疊時,ix預設優先識別名稱
控制ix方法需要注意以下幾點。

  • 使用列索引名稱,而非列索引位置。主要用來保證程式碼可讀性。
  • 使用列索引位置時,需要註解。同樣保證程式碼可讀性。
  • 除此之外ix方法還有一個缺點,就是在面對資料量巨大的任務的時候,其效率會低於loc和iloc方法,所以 在日常的資料分析工作中建議使用loc和iloc方法來執行切片操作。

資料修改

更新修改DataFrame中的資料

更改DataFrame中的資料,原理是將這部分資料提取出來,重新賦值為新的資料。
需要注意的是,資料更改直接針對DataFrame原資料更改,操作無法撤銷,如果做出更改,需要對更改 條件做確認或對資料進行備份。
eg: 請把上個例子中Snow年齡改為25 開啟practice.py檔案
#iat取某個單值,只能數字索引 df.iat[1,1]#第1行,1列
#at取某個單值,只能index和columns索引名稱df.at[‘one’,‘a’]#one行,a列

為DataFrame增加資料

DataFrame新增一列的方法非常簡單,只需要新建一個列索引。並對該索引下的資料進行賦值操作即可。
新增的一列值是相同的則直接賦值一個常量即可。
eg:給上個例子學生加上score一列。分別為:80,98,67,90
給上個例子學生加上一行資訊 資訊分別為:lisa F 19 100
例:

import numpy as np
import pandas as pd
import cv2

# 建立DataFrame
df = pd.DataFrame([['Snow', 'M', 22], ['Tyrion', 'M', 32], ['Sansa', 'F', 18], ['Arya', 'F', 14]],
                  columns=['name', 'gender', 'age'])
s2 = pd.DataFrame(data=[["chise", "M", 20]], columns=['name', 'gender', 'age'],index=["4"])
print(df)
print(s2)
#注意一定要等於,因為append是不會把值插入df的。。媽的
df=df.append(s2)
print(df)

刪除資料

刪除某列或某行資料需要用到pandas提供的方法drop,drop方法的用法如下。
axis為0時表示刪除行,axis為1時表示刪除列。
drop(labels, axis=0, level=None, inplace=False,errors=‘raise’)
在這裡插入圖片描述
例:

>>> df
     name gender  age
0    Snow      M   22
1  Tyrion      M   32
2   Sansa      F   18
3    Arya      F   14

>>> df.drop(labels=[0])
     name gender  age
1  Tyrion      M   32
2   Sansa      F   18
3    Arya      F   14
>>> 

資料排序

df.sort_index(axis=,ascending=) axis為0/1的引數,表示按行/按列排序;ascending為boolean引數,False表示降序,True表示升序。
df.sort_values(by=,ascending=) by表示按哪一個columns引數排序

>>> df.drop(labels=[0])
     name gender  age
1  Tyrion      M   32
2   Sansa      F   18
3    Arya      F   14
>>> df.sort_values(by="age")
     name gender  age
3    Arya      F   14
2   Sansa      F   18
0    Snow      M   22
1  Tyrion      M   32
>>> 

描述分析DataFrame資料

數值型資料的描述性統計主要包括了計算數值型資料的完整情況、最小值、均值、中位數、最大值、四分位數、極差、標準差、方差、協方差和變異係數等。在NumPy庫中一些常用的統計學函式如下表所示。
pandas庫基於NumPy,自然也可以用這些函式對資料框進行描述性統計。

在這裡插入圖片描述

pandas描述性統計方法

平均絕對離差 平均絕對離差指的是各觀察值與平均值的 距離總和,然後取其平均數 偏度含義是統計資料分佈偏斜方向和程度 的度量,是統計資料分佈非對稱程度的數 字特徵。 峰度,表徵概率密度分佈曲線在平均值處峰值高低的特徵數,反映了峰部的尖度。
在這裡插入圖片描述

獲取資料

文字檔案讀取

文字檔案是一種由若干行字元構成的計算機檔案,它是一種典型的順序檔案。
csv是一種逗號分隔的檔案格式,因為其分隔符不一定是逗號,又被稱為字元分隔檔案,檔案以純文字形 式儲存表格資料(數字和文字)。

  • 使用read_table來讀取文字檔案。 pandas.read_table(filepath_or_buffer, sep=’\t’, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)
  • 使用read_csv函式來讀取csv檔案。 pandas.read_csv(filepath_or_buffer, sep=’,’, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)
    在這裡插入圖片描述
    read_table和read_csv函式中的sep引數是指定文字的分隔符的,如果分隔符指定錯誤,在讀取資料的時 候,每一行資料將連成一片。
    header引數是用來指定列名的,如果是None則會新增一個預設的列名。
    encoding代表檔案的編碼格式,常用的編碼有utf-8、utf-16、gbk、gb2312、gb18030等。如果編碼 指定錯誤資料將無法讀取,IPython直譯器會報解析錯誤
    例:
#讀取電影詳情表 movies
# header是否讀取表頭,為none,
# names,沒有讀取表頭的時候這裡自定義表頭
#sep="::"分隔符
# engine='python' 使用的軟體,預設為C??

movies=pd.read_table(r'C:\Users\Cs\Desktop\pandas\pandas_day_02\pandas_student\movies.dat',header=None,names=["MovieID",'Title','Genres'],sep="::",engine='python')
print(movies.head(5))
#讀取評分表 Ratings
ratings=pd.read_table(r'C:\Users\Cs\Desktop\pandas\pandas_day_02\pandas_student\ratings.dat',header=None,names=['UserID','MoiveID','Rating','Timestamp'],sep="::",engine='python')
print(ratings.head())
# 讀取test.csv表格
csv=pd.read_csv('iris.csv')
print(csv.head())

Excel檔案讀取

pandas提供了read_excel函式來讀取“xls”“xlsx”兩種Excel檔案。 pandas.read_excel(io, sheetname=0, header=0, index_col=None, names=None, dtype=None)
在這裡插入圖片描述

儲存資料

文字檔案儲存

文字檔案的儲存和讀取類似,結構化資料可以通過pandas中的to_csv函式實現以csv檔案格式儲存檔案。 DataFrame.to_csv(path_or_buf=None, sep=’,’, na_rep=”, columns=None, header=True, index=True,index_label=None,mode=’w’,encoding=None)
在這裡插入圖片描述

Excel檔案儲存

將檔案儲存為Excel檔案,可以使用to_excel方法。其語法格式如下。 DataFrame.to_excel(excel_writer=None, sheetname=None’’, na_rep=”, header=True, index=True, index_label=None, mode=’w’, encoding=None)
to_csv方法的常用引數基本一致,區別之處在於指定儲存檔案的檔案路徑引數名稱為excel_writer,並且 沒有sep引數,增加了一個sheetnames引數用來指定儲存的Excel sheet的名稱,預設為sheet1