Python DataFrame資料針對內容的索引操作總結
在平時學習和建模過程中,處理Excel文件是非常常見的工作,而Excel在Python眼中就是一個簡單的datafram型別的資料
1、讀取Excel檔案的資料
1 import pandas as pd 2 import numpy as np 3 4 # 函式read_excel用來讀取Excel文件為dataframe型別,引數sheet_name可以是工作簿中工作表的索引(從0開始),也可以是工作表的名字 5 data = pd.read_excel("enterprise123_data.xlsx", sheet_name=1) # 此處讀取第二個工作表
函式read_excel返回的直接就是一個dataframe型別的資料
2、對於內容的索引
首先看一下Excel表格內的內容
此處我們想索引企業代號為E1的企業的價稅合計所在列的資料,用dataframe資料的索隱函式loc來實現,實力操作如下:
price_tax_sum = data.loc[data['企業代號']=='E1', '價稅合計']
選取的E1企業的價稅合計資料儲存在變數price_tax_sum中,price_tax_sum同時也是一個dataframe型別的資料
使用price_tax_sum中元素的值:
array = price_tax_sum.values #將元素中的值賦給變數array,array為一個一維陣列
也可直接用dataframe型別的行列索引訪問price_tax_sum中的每個元素,但一般都是對資料處理都是大批處理,因此轉為陣列然後用for迴圈處理比較方便
3、如何大批量對不同企業代號的企業資料進行選取呢?
這裡要用到字串的格式化,因為不同企業的企業代號均為字串形式,不同在於E後面的數字不同
1 for i in range(1,124): 2 txt = "E{}" 3 price_tax_sum = data.loc[data['企業代號']==txt.format(i), '價稅合計']
程式碼中txt.format(i)就表示將資料 i 填充到字串txt中的{}內,這樣每一輪for迴圈得到的price_tax_sum就是不同企業的價稅合計資料,在迴圈體中即可對價稅合計資料進行操作
字串的格式化也可以支援多值索引,具體可自己CSDN,理解起來很簡單
4、總結一下dataframe型別中我經常需要用到的使用操作
(1)刪除dataframe中行和列的方法總結
刪除具體列:刪除工作表中“價稅合計”整列元素:
data = data.drop('價稅合計', axis=1) # axis=1表示刪除的是列元素,函式引數為列索引名
刪除具體行:刪除E1企業的所有行:
data = data.drop('E1') # axis=0或者不寫表示drop函式預設刪除行元素,函式引數為行索引名
刪除特定數值的行(最常用):刪除發票狀態為作廢發票的行:
data = data[data['發票狀態'] == '作廢發票']
刪除/儲存包含某些字元、文字的行:
# 刪除發票狀態中包含“作廢”兩字的行 data = data[~data['發票狀態'].str.contains('作廢')]
# 儲存發票資訊中包含“有效”兩字的行,區別在於不要"~" data = data[data['發票狀態'].str.contains('有效')]
(2)填充空值
# 刪除存在空值的行 data = data.dropna() # 刪除存在空值的列 data = data.dropna(axis=1) # 填充空值 data.fillna(3, inplace=True) # inplace=True表示在原DataFrame上修改 # 結合一些計算出來的值進行填充 data.fillna(np.mean(data['價稅合計']), inplace=True)
對某些單元格滿足特定條件進行修改其值時,可利用for迴圈來批量處理
在每輪迴圈中用if判斷是否滿足條件,如滿足則修改成特定值
(3)兩大索隱函式loc和iloc的區別
loc——通過行標籤索引行資料
iloc——通過行號(為數字)索引行資料
iloc是按照行數取值,而loc按著index名取值
(4)更改索引值
# 直接給行、列索引賦值進行更改 data.columns = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] data.index = ['a', 'c', 'd']