1. 程式人生 > 其它 >Python DataFrame資料針對內容的索引操作總結

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']