Python数据分析pandas模块用法实例详解
本文详细解析Python中pandas模块的核心用法,涵盖Series与DataFrame的创建、属性获取及多种索引方式。通过实例演示字典、数组等数据源的转换,深入讲解loc、iloc等高级索引技巧,并指出ix方法的弃用情况,帮助开发者掌握高效的数据处理技能。
本文通过具体实例介绍Python数据分析中pandas模块的使用方法,旨在为读者提供实用的参考指南。
pandas
关于pandas的十分钟快速入门教程,可访问官方网站查阅:10 minutes to pandas。
此外,官方还提供了更复杂的cookbook供深入学习。
- pandas是一个功能强大的数据分析工具包,它建立在Numpy之上,提供了更高级的数据结构和操作工具。正如Numpy的核心是ndarray,pandas的核心则是Series和DataFrame这两个数据结构,分别对应一维序列和二维表格结构。
创建对象
标准的导入方式如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
Series
- Series可视为一个长度固定且有序的字典,它能够存储任意类型的数据(包括整数、字符串、浮点数或Python对象),构成一维带标签的数组。
- 一个Series对象主要包含两个属性:index(索引)和values(值)。
- 在创建Series时,数据源可以是Python字典、ndarray数组或标量值(例如5)。
- 无论创建时是否指定index,系统都会设置默认的下标;但若使用数组作为索引,则会保留创建时指定的索引值。
- 创建Series时可以指定name属性,后续也可通过rename方法进行修改。
ser1 = pd.Series(range(10,15),index=list('ABCDE'))
print(ser1)
# 下标和索引等同
print(ser1['A'])
print(ser1[0])
输出结果示例:
A 10 B 11 C 12 D 13 E 14 dtype: int64 10 10
在选取连续多个数据时,使用下标切片不包含结束位置,而使用索引切片则包含结束位置。
print(ser1['A':'D'])
print(ser1[0:3])
输出结果示例:
A 10 B 11 C 12 D 13 dtype: int64 A 10 B 11 C 12 dtype: int64
选取多个数据或进行条件筛选(布尔索引)的操作示例如下。
# 注意里面是一个列表
print(ser1[[0,1,3]])
# 布尔索引
print(ser1[(ser1>12)&(ser1<15)])
DataFrame
DataFrame是一个二维的带标签数据结构,可以类比为电子表格或SQL表,也是Series对象的集合。它通常是pandas中最常用的对象类型。与Series类似,DataFrame支持多种输入形式:
- 包含一维ndarray、列表、字典或Series的字典。
- 二维numpy.ndarray数组。
- 结构化或记录类型的ndarray。
- Series对象。
- 另一个DataFrame对象。
df1 = pd.DataFrame(np.random.randint(10,50,(3,4)), - index=list('ABC'),columns=list('abcd'))
- 其中,index表示行索引,columns表示列索引。
- 当使用字典创建DataFrame时,字典的键名即为列索引,且键值可以是列表,系统会自动进行补齐处理。
获取单行、单列或单个数据的具体操作如下。
# 列取值,取出的是一个series对象
print(df1['a'])
print(df1['a'].values)
# 取出一行数据的某一行数据,也就是单个数据
print(df1['a']['B']) # 这两个一样
print(df1['a'][1])
获取不连续的多列数据,以及获取连续多列数据(默认情况下不支持直接切片,需使用高级索引)。
# 取不连续多列
print(df1[['a','c']])
行索引支持直接切片,但默认情况下不支持直接获取不连续的多行数据,下标选取同理。
print('行索引取值##############')
print(df1['A':'A'])
# 取连续多行就是df1['A':'C']
高级索引(花式索引)
高级索引通常应用于DataFrame,此处略过Series的相关讨论。
loc标签索引
df1 = pd.DataFrame(np.random.randint(10,50,(5,4)), index=list('ABCDE'),columns=list('abcd'))
# 取单行,类型是series
print(df1.loc['A'])
print(type(df1.loc['A']))
# 取连续多行,类型是DataFrame
print(df1.loc['A':'C'])
# 如果没有index索引就用下标,可以取连续多行连续多列
print(df1.loc['A':'D','a':'c'])
# 取不连续多行不连续多列
print(df1.loc[['A','C'],['a','c']])
iloc位置索引
iloc的用法与loc类似,但下标索引遵循左闭右开原则,而loc则包含最后一位元素。
# DataFrame
print(df1.iloc[0:2, 0]) # 注意和df1.loc['A':'C', 'a']的区别
print(df1.loc['A':'C', 'a'])
ix 标签与位置混合索引
博主使用的pandas 0.24.2版本中,.ix方法已被弃用(尽管仍可使用并会发出警告),因此此处不再展开介绍。
- ix是上述两种索引的综合体,既可以使用索引编号,也可以使用自定义索引,具体使用需视情况而定。
- 如果索引中同时包含数字和英文字符,不建议使用这种方式,因为这容易导致定位混乱。
增加数据
| 1 | 2 |
|---|---|
| 增加一行数据 | 1.df1.loc[‘D'] = [1,2,3,4,5] 2.df1.loc[‘D'] = [np.random.randint(10,20)] |
| 增加一列数据 | df1. |
如需了解更多Python相关内容,可参考本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。
希望本文所述内容能对大家的Python程序设计有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













