摘要:通过pandas的DataFrame,实现平面文件表格内容的读写,使用智能切片loc等获得子集信息。

一、概述




python dataframe 赋空值_dataframe iloc

图1-1



Pandas是基于numpy的一套模块,所以也拥有numpy强大的分析功能。Pandas 包括1维Series和2维DataFrame2个主要的数据结构,因为经常处理表格数据的需要,本文重点了解下DataFrame的数据读写和切片部分内容。

示例文件sales1.csv内容:




python dataframe 赋空值_dataframe 切片_02

图1-2



Pandas读取后,如果未明确指定索引名称,在dataframe中会自动新增数值的索引列(红色框部分):




python dataframe 赋空值_dataframe iloc_03

图1-3



二、功能展示

首先,完成模块的导入:

import numpy as np

import pandas as pd

1、文件读写

Pandas可以轻松完成对平面文件(CSV和分隔)、Excel文件的数据读取和保存工作。

1.1、 读写编码

import numpy as npimport pandas as pd#################输入文件input_file = r'E:pytestsales1.csv'#输出文件output_file = r'E:pytestoutput.csv'#1、读取csv文件data = pd.read_csv(input_file)print(data)#2、修改,将sex列的girl修改为‘女’,其他修改为‘男’data['sex']=np.where(data['sex']=='girl','女','男')#3、写出,设置写出字符编码为'utf-8_sig',避免中文乱码# index=None表示不需要写出索引列data.to_csv(output_file,encoding='utf-8_sig',index=None)

1.2、 运行结果




python dataframe 赋空值_dataframe 切片_04

图2-1



写出文件内容output.csv:




python dataframe 赋空值_dataframe 筛选_05

图2-2



2、熟悉文件的结构

2.1维度查看

Print(data.shape)




python dataframe 赋空值_dataframe 筛选_06

图2-3



2.2结构内容查看

打开的文件可能比较大,可以输出几行查看内容类型,以便更好的调试

print(data.head(3)):

name age sex

0 li1 10 girl

1 zhang1 11 boy

2 li2 12 girl

2.3、loc[row,col]行列切片

重点是体验对应的分隔符位置

1)row的连续格式“loc[row1:row2]”,表示row1到row2的连续行。

例如,print(data.loc[1:3])




python dataframe 赋空值_dataframe 筛选_07

图2-4



2)row的不连续格式“loc[[row1,row2]]”,表示row1,row2不连续行。

例如,print(data.loc[[1,3]])




python dataframe 赋空值_dataframe切片_08

图2-5



3)col的连续格式“loc[:,col1:col2]”,表示col1到col2的连续行;“:,”表示行标识,默认为所有行。

例如,print(data.loc[:,'A':'C']),进行列的连续输出,需要列名称具备连续标识才行;类似age:sex等不连续的是无法执行的,所以本示例专门将列标识更改为A、B、C的样式,来进行展示




python dataframe 赋空值_dataframe切片_09

图2-6



4)col的不连续格式“loc[:,col1:col2]”,表示col1到col2的连续行。

例如,print(data.loc[:,['name','sex']])




python dataframe 赋空值_dataframe切片_10

图2-7




python dataframe 赋空值_dataframe 切片_11

图2-8



5)row和col共同作用下,行连续方式 “loc[row1:row2,[col1,col2]]”。

例如,获取索引为1-3连续行对应的name、sex的内容

print(data.loc[1:3,['name','sex']])




python dataframe 赋空值_dataframe iloc_12

图2-9



6)row和col共同作用下,行不连续方式“loc[[row1,row2],[col1,col2]]”。

例如,获取索引为1/3不连续行对应的name、sex的内容

print(data.loc[[1,3],['name','sex']])




python dataframe 赋空值_dataframe iloc_13

图2-10



7) row和col共同作用下,获取指定单元格内容“loc[row, col]”。

例如,获取索引为1对应的name的单元格内容

print(data.loc[1,'name'])




python dataframe 赋空值_dataframe 筛选_14

图2-11



8)iloc格式

iloc与loc一致,区分在于

A)、loc使用索引标签定位;

B)、iloc的数字不再是索引标签名称,而是数据所在的位置,从0开始。

例如




python dataframe 赋空值_dataframe 切片_15

图2-12



9)ix格式

ix实现按索引标签和位置混合提取数据,也即ix是loc和iloc的混合体,但是已经被废弃,告警说明如下




python dataframe 赋空值_dataframe 切片_16

图2-13



2.3变更数据格式

表格读取经常为字符型数据,转换为整数格式

data['age'] = data['age'].astype('int')

3、数据筛选

Pandas的筛选,实际就是将对应条件植入row,col的位置,实现对应的检索




python dataframe 赋空值_dataframe切片_17

图2-14



4、数据的分析

4.1、数据筛选

Pandas的真正强大,是因为继承自numpy,可以轻易实现数据的各项分析,例如通过条件筛选可以直接获取对应的数据平均值:

#筛选age大于12,sex为girl的行print(data.loc[((data['age']>12)&(data['sex']=='girl'))])#筛选age大于12,sex为girl的行,然后对满足条件的行的age求评价print(data.loc[((data['age']>12)&(data['sex']=='girl'))].age.mean())




python dataframe 赋空值_dataframe iloc_18

图2-15



4.2、数据的分类汇总

Pandas的groupby可以轻易实现类似关系数据库的分类汇总。

例如,以sex进行分类汇总print(data.groupby('sex').count()):




python dataframe 赋空值_dataframe切片_19

图2-16



多字段的汇总




python dataframe 赋空值_dataframe切片_20

图2-17



三、总结

Pandas读取文件后,进行的子集切片是基本操作;pandas的强大,实际源于他的统计分析,可以通过pandas官网文档获取。