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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM