關於pandas的一些常用知識,備忘

原帖地址,此貼爲學習驗證過程。傳送門

創建一個series語法如下


series = pd.Series([1,2,3,4],['beijing','shanghai','xian','shenzhen'])
series = pd.Series(data,[index])

在這裏插入圖片描述

index爲可選參數,如果不設置index,則索引默認爲數組下標

series = pd.Series(['beijing','shanghai','xian','shenzhen'])

在這裏插入圖片描述
series支持( + - * /)運算,運算原理是根據索引運算,如若索引對應不上,該位置返回NaN,如果要求運算結果的精度問題則需要加入pd.set_option('precision', 3),3就是返回的小數點位數,其結果是四捨五入後的結果

series = pd.Series([1,2,3,4],['beijing','shanghai','xian','shenzhen'])
series2 = pd.Series([6,7,8,9],['beijing','wuhan','xian','shenzhen'])
print("--------減法運算------------","\n",series-series2)
print("--------乘法運算------------","\n",series*series2)
print("--------加法運算------------","\n",series+series2)
print("--------除法運算------------","\n",series/series2)

在這裏插入圖片描述

對於字典類型也有如下操作,更加的高效,便捷

dicts = {'A':1,"B":2,"C":3}
series_dict =pd.Series(dicts)
print(series_dict.index)#獲取字典鍵值

print(series_dict['A'])#訪問series元素

print(dict(series_dict))#相互轉換

在這裏插入圖片描述

DataFrames

Pandas 的 DataFrame(數據表)是一種 2 維數據結構,數據以表格的形式存儲,分成若干行和列。通過 DataFrame,你能很方便地處理數據。常見的操作比如選取、替換行或列的數據,還能重組數據表、修改索引、多重篩選等。

構建一個 DataFrame 對象的基本語法如下:

df = {
	'name':pd.Series(['bob',"john","tom"],['A','B','C']),
	'age':pd.Series(['15','16','13','20'],['A','B','C','D']),
	'sex':pd.Series(['男','女',"男"],['A','B','C'])
}
df = pd.DataFrame(df)
print(df)

在這裏插入圖片描述
一個有意思的事情是,單獨的series裏面的index必須和數據一一對應,缺一不可.
但是DataFrame裏面卻沒有那麼嚴格的要求,空出來位置顯示的就是NaN.

當我們用一個字典來構建DataFrame的時候,要求就又變得嚴格了

df = {
	'name':['bob',"john","tom",'Frank'],
	'age':['15','16','13','20'],
	'sex':['男','女',"男","男"]
}
df = pd.DataFrame(df,index=['A','B','C','D'])#index依然是可選參數
print(df)

在這裏插入圖片描述
如果對應位置缺少數據,不會以NaN補充,而是直接報錯,這裏要注意兩種區別.
想要獲取內容也很簡單,其返回的其實就是一個series

print(df['name'])

在這裏插入圖片描述

給DataFrame增加一列,需要注意的是這裏的索引必須加上,否則增加的一列全是NaN數據,這裏務必注意。

當然也是可以利用現有的列來產生需要的新列。(就是兩個series運算後得到新的series)

df = {
	'name':['bob',"john","tom",'Frank'],
	'age':['15','16','13','20'],
	'sex':['男','女',"男","男"]
}
df = pd.DataFrame(df,index=['A','B','C','D'])
df['high'] = pd.Series(['178','175','168','170'],['A','B','C','D'])

print(df)

在這裏插入圖片描述

從 DataFrame 裏刪除行/列:

想要刪除某一行或一列,可以用 .drop() 函數。在使用這個函數的時候,你需要先指定具體的刪除方向,axis=0 對應的是行 row,而 axis=1 對應的是列 column 。

df = {
	'name':['bob',"john","tom",'Frank'],
	'age':['15','16','13','20'],
	'sex':['男','女',"男","男"]
}
df = pd.DataFrame(df,index=['A','B','C','D'])
df['high'] = pd.Series(['178','175','168','170'],['A','B','C','D'])

print(df)
df = df.drop('A',axis=0)
print("這裏刪除了A行")
print(df)

在這裏插入圖片描述

df = {
	'name':['bob',"john","tom",'Frank'],
	'age':['15','16','13','20'],
	'sex':['男','女',"男","男"]
}
df = pd.DataFrame(df,index=['A','B','C','D'])
df['high'] = pd.Series(['178','175','168','170'],['A','B','C','D'])

print(df)
df = df.drop('name',axis=1)
print("這裏刪除了name列")
print(df)

在這裏插入圖片描述

請務必記住,除非用戶明確指定,否則在調用 .drop() 的時候,Pandas 並不會真的永久性地刪除這行/列。這主要是爲了防止用戶誤操作丟失數據。

你可以通過調用 df 來確認數據的完整性。如果你確定要永久性刪除某一行/列,你需要加上 inplace=True 參數,比如:

df = {
	'name':['bob',"john","tom",'Frank'],
	'age':['15','16','13','20'],
	'sex':['男','女',"男","男"]
}
df = pd.DataFrame(df,index=['A','B','C','D'])
df['high'] = pd.Series(['178','175','168','170'],['A','B','C','D'])

print(df)
df2 = df.drop('name',axis=1)#inplace=True添加以後原始數據改變
print("這裏刪除了name列,原始數據其實並未改變")
print(df)

在這裏插入圖片描述

**獲取 DataFrame 中的一行或多行數據

要獲取某一行,你需要用 .loc[] 來按索引(標籤名)引用這一行,或者用 .iloc[],按這行在表中的位置(行數)來引用。
**

df = {
	'name':['bob',"john","tom",'Frank'],
	'age':['15','16','13','20'],
	'sex':['男','女',"男","男"]
}
df = pd.DataFrame(df,index=['A','B','C','D'])
df['high'] = pd.Series(['178','175','168','170'],['A','B','C','D'])
print(df)
a = df.loc['A']
print("這是A行")
print(a)

在這裏插入圖片描述

a0 = df.iloc[1:3]
print("這是用當前行的下標來訪問")
print(a0)

在這裏插入圖片描述

同時你可以用 .loc[] 來指定具體的行列範圍,並生成一個子數據表,就像在 NumPy裏做的一樣。比如,提取 ‘c’ 行中 'Name’ 列的內容,可以如下操作:

df = {
	'name':['bob',"john","tom",'Frank'],
	'age':['15','16','13','20'],
	'sex':['男','女',"男","男"]
}
df = pd.DataFrame(df,index=['A','B','C','D'])
df['high'] = pd.Series(['178','175','168','170'],['A','B','C','D'])
print(df)
a_NAME = df.loc['A','age']
print("這是訪問A行的name")
print(a_NAME)

在這裏插入圖片描述

用中括號 [ ] 的方式,除了直接指定選中某些列外,還能接收一個條件語句,然後篩選出符合條件的行/列。比如,我們希望在下面這個表格中篩選出身高>175 的行:

df = {
	'name':['bob',"john","tom",'Frank'],
	'age':['15','16','13','20'],
	'sex':['男','女',"男","男"]
}
df = pd.DataFrame(df,index=['A','B','C','D'])
df['high'] = pd.Series(['178','175','168','170'],['A','B','C','D'])

df['high'] = df['high'].apply(pd.to_numeric)#把high先轉換爲數據類型

need_df = df[df['high']>175]
print(need_df)

在這裏插入圖片描述

need_df = df[df['high']>175][['name','age']]#帥選出身高大於175的人的姓名,年齡
print(need_df)

在這裏插入圖片描述

need_df = df[df['high']>175][['name','age']]#帥選出身高大於175的人的姓名,年齡
#分解上述表達式
need_a = df['high']>175
print("這是第一個需求","\n",need_a)
need_b = df[need_a]
print("這是第二個需求","\n",need_b)
need_c = need_b[['name','age']]
print("這是第三個需求","\n",need_c)

在這裏插入圖片描述

你可以用邏輯運算符 &(與)和 |(或)來鏈接多個條件語句,以便一次應用多個篩選條件到當前的 DataFrame 上。舉個栗子,你可以用下面的方法篩選出同時滿足 ‘high’>175 和’age’>15 的行:

df = {
	'name':['bob',"john","tom",'Frank'],
	'age':['15','16','13','20'],
	'sex':['男','女',"男","男"]
}
df = pd.DataFrame(df,index=['A','B','C','D'])
df['high'] = pd.Series(['178','175','168','170'],['A','B','C','D'])

df['high'] = df['high'].apply(pd.to_numeric)#把high先轉換爲數據類型
df['age'] = df['age'].apply(pd.to_numeric)#把high先轉換爲數據類型

need = df[(df['high']>175) | (df['age']>=15)]
print(need)
need = df[(df['high']>175) & (df['age']>=15)]
print(need)

在這裏插入圖片描述

**重置 DataFrame 的索引

如果你覺得當前 DataFrame 的索引有問題,你可以用 .reset_index() 簡單地把整個表的索引都重置掉。這個方法將把目標 DataFrame 的索引保存在一個叫 index 的列中,而把表格的索引變成默認的從零開始的數字,也就是 [0, …, len(data) - 1] 。比如下面這樣:**

import pandas as pd 
import numpy as np 
df = {
	'name':['bob',"john","tom",'Frank'],
	'age':['15','16','13','20'],
	'sex':['男','女',"男","男"]
}
df = pd.DataFrame(df,index=['A','B','C','D'])
df['high'] = pd.Series(['178','175','168','170'],['A','B','C','D'])

new_df=df.reset_index(inplace=True)
print(df)
print(new_df)

在這裏插入圖片描述
想必也都知道爲什麼會有一個none值了。

#利用map函數構建一個索引列出來,這裏直接覆蓋了原有的索引,和上面的不同,要注意
new_df=df.reset_index(inplace=True)
print(df)
df['id'] = list(map(lambda x:str(x)*2,list(range(4))))
df = df.set_index('id')
print(df)

在這裏插入圖片描述

學到哪裏寫到哪裏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章