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类型的数据

Python DataFrame数据针对内容的索引操作总结

 

 2、对于内容的索引

首先看一下Excel表格内的内容

Python DataFrame数据针对内容的索引操作总结

Python DataFrame数据针对内容的索引操作总结

 

 此处我们想索引企业代号为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就是不同企业的价税合计数据,在循环体中即可对价税合计数据进行操作

字符串的格式化也可以支持多值索引,具体可自己****,理解起来很简单

 

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']
上一篇:DataFrame插入一列数据


下一篇:Python Pandas的使用 !!!!!详解