Pandas 之 DataFrame 學習總結

2021-10-01 11:36:51 字數 4062 閱讀 8144

pandas 是基於 numpy 開發的,他的主要資料結構包括 series 和 dataframe,另外還有 time-series、panel、panel4d 和 panelnd,我現在的學習中不常用到,暫不詳細介紹。

資料結構

簡介series

一維陣列,與numpy中的一維array類似。二者與python基本的資料結構list也很相近。

series如今能儲存不同種資料型別,字串、boolean值、數字等都能儲存在series中。

time-series

以時間為索引的series。

dataframe

二維的**型資料結構。很多功能與r中的data.frame類似。可以將dataframe理解為series的容器。

panel

三維的陣列,可以理解為dataframe的容器。

panel4d

是像panel一樣的4維資料容器。

panelnd

擁有factory集合,可以建立像panel4d一樣n維命名容器的模組。

import numpy as np

import pandas as pd

data = np.array([[

1,2,

3],[

4,5,

6],[

7,8,

9]])

c =[

'a',

'b',

'c']

r =[

'a',

'b',

'c']

df = pd.dataframe(data=data, columns=c, index=r)

按行名或列名排序

# 行名排序 降序

df.sort_index(axis=

0, ascending=

false

)# 列名排序 降序

df.sort_index(axis=

0, ascending=

false

)

按值排序

df[

"a"]

.sort_values(ascending =

false

)df.sort_values(

['a'

,'b'

,'c'

])

位置索引

df.iloc[2] 			# 選擇第二行所有資料, 是series型別

df.iloc[[2]] # 選擇第二行所有資料, 是dataframe型別

df.iloc[:, 2] # 選擇第二列所有資料, 是series型別

df.iloc[:, [2]] # 選擇第二列所有資料, 是dataframe型別

df.iloc[:, 0:2] # 選擇0到2列所有資料

df.iloc[[2,3], 0:2] # 選擇2和3行, 0到2列所有資料

df.iat[1, 1] # 根據位置快速取出資料, 獲取單個資料推薦這種方法

自定義索引

df.loc['top'] 		# 選擇指定行資料, 是series型別

df.loc[['top']] # 選擇指定行資料, 是dataframe型別

df.loc[:, 'xm'] # 選擇指定列資料, 是series型別(不推薦)

df.loc[:, ['xm']] # 選擇指定列資料, 是dataframe型別(不推薦)

df.loc[:, ['bj','xm']] # 選擇多列資料(不推薦)

df.loc[:, 'bj':'xb'] # 選擇多列之間所有資料, 列切片只能用這種方法

df.loc[['top','count'], 'bj':'xb'] # 選擇指定行, 指定列資料

df.at['top', 'xm'] # 根據自定義索引快速取出資料, 獲取單個資料推薦這種方法

布林索引

# 選取所有出生日期大於等於2023年的資料, 這裡是字串比較

df[df['csrq']>='1998']

# 選取所有出生日期大於等於2023年小於2023年的資料

df[(df['csrq']>='1997')&(data['csrq']<'1999')]

# 選取所有出生日期大於等於2023年小於2023年的資料

df[df['csrq'].between('1997', '1999')]

# 選取所有出生日期大於等於2023年或者姓名為張三的資料

df[(df['csrq']>='1997')|(data['xm']=='張三')]

# 另一種選取方式(不推薦, 實測效率比上面低)

df[df.csrq>='1998']

# 選擇字段值為指定內容的資料

df[df['xm'].isin(['張三','李四'])]

# 假設cj列本來不存在, 這樣會在列尾新增新的一列cj, 值為s(series物件), 原地

df['cj'] = s

# 在第1列位置插入一列dz(位址), 值為s, 原地

df.insert(0, 'dz', s)

# 在df中新增內容為df2(必須是dataframe物件)的新列(新增列), 非原地

df.join(df2)

# 將df2中的行新增到df的尾部(新增行), 非原地

# 刪除單列, 並返回刪除的列, 原地

df.pop('xm')

# 刪除指定行, 非原地

df.drop(1)

# 刪除指定列, axis=1指第2維, axis預設0, 非原地

df.drop(['xm', 'xh'], axis=1)

'''常用屬性'''

df.values # 檢視所有元素的value

df.dtypes # 檢視所有元素的型別

df.index # 檢視所有行名

df.index = ['總數', '不同', '最多', '頻率'] # 重新命名行名

df.columns # 檢視所有列名

df.columns = ['班級', '姓名', '性別', '出生日期'] # 重新命名列名

df.t # 轉置後的df, 非原地

'''檢視資料'''

df.head(n) # 檢視df前n條資料, 預設5條

df.tail(n) # 檢視df後n條資料, 預設5條

df.shape() # 檢視行數和列數

df.info() # 檢視索引, 資料型別和記憶體資訊

'''資料統計'''

df.describe() # 檢視資料值列的匯**計, 是dataframe型別

df.count() # 返回每一列中的非空值的個數

df.sum() # 返回每一列的和, 無法計算返回空, 下同

df.sum(numeric_only=true) # numeric_only=true代表只計算數字型元素, 下同

df.max() # 返回每一列的最大值

df.min() # 返回每一列的最小值

df.argmax() # 返回最大值所在的自動索引位置

df.argmin() # 返回最小值所在的自動索引位置

df.idxmax() # 返回最大值所在的自定義索引位置

df.idxmin() # 返回最小值所在的自定義索引位置

df.mean() # 返回每一列的均值

df.median() # 返回每一列的中位數

df.var() # 返回每一列的方差

df.std() # 返回每一列的標準差

df.isnull() # 檢查df中空值, nan為true, 否則false, 返回乙個布林陣列

df.notnull() # 檢查df中空值, 非nan為true, 否則false, 返回乙個布林陣列

'''轉換成 numpy'''

df.values

np.array(df)

pandas的資料結構之DataFrame

dataframe是乙個 型的資料結構,它含有一組有序的列,每列可以是不同資料型別的資料。dataframe既有行索引也有列索引,可以將它看作為乙個由series組成的字典 共用同乙個索引 dataframe中的資料是以乙個或多個二維塊儲存的,而不是列表 字典或別的一維資料結構。a 通過字典建立,字...

pandas中dict和dataFrame互轉

pd.dataframe dict a 使用df.to dict 缺省會把key和值分開 引數 dict 預設 list series split records index 如果是list dict 這種巢狀情況轉的df,迴轉需要使用records 拿上面的資料舉例,df b a b c 0 0 ...

pandas 把字典轉換成DataFrame

把dictd 轉換成dataframe,首先,dataframe的語法格式應為 import pandas as pd df pd.dataframe a 是columns,對應的是list12 輸出 a 0 012 但是如果是 df pd.dataframe 直接輸入dict 1會報錯 value...