一、概述
之前我们讲了Python数据分析中基础的工具包Numpy,今天我们来讲讲Pandas,由于Pandas的内容也比较多,本文主要还是讲解一些入门的基本知识。
二、详细说明
同样的我们来引入使用的库
import pandas as pd
2.1、数据结构
在介绍之前,我们先来说说Pandas中常用的两种数据结构:Series、DataFrame。Series的基础知识
创建Series
import pandas as pd
# 创建series(通过数据创建)
pd.Series(["a","b","c","d"])
# 创建series(通过字典创建)
dict = {
"a":"python",
"b":"java",
"c":"php"
}
pd.Series(dict)
# 创建series(通过自定义index创建)
pd.Series(["java","php","python","jsp"],index=["a","b","c","d"])
基本属性、操作、方法
ser_data = pd.Series(["java","php","python","jsp"],index=["a","b","c","d"])
# 获取series的索引
ser_data.index
# 获取series的值
ser_data.values
# 通过索引取值
ser_data["a"]
ser_data[["a","b"]]
# 判断是否有缺失值
ser_data.isnull()
ser_data.notnull()DataFrame的基础知识
创建DataFrame
pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=['a', 'b', 'c'],index=["one","two","three"])
注:可以自定义索引名称和列名,同样也可以使用字典类型创建
基本属性、操作、方法
# 显示前五行/后五行
df.head()/df.tail()
# 获取某列的值名
df.columns
# 获取某列的值
df["a"]
df.a
df1[["a","b"]] # 选取多列
# 根据轴标签索引
df.loc["one":"three"]
# 根据整数索引
df.iloc[0:1]
# 获取某几行几列
df1.iloc[[0,2],[1,2]]
2.2、基本功能重新索引
# 参数:index、method、fill_value(不存在时填充值),columns表示更改列名
df.reindex(["one","two","hh","gg","ff"])
# 重新设置索引,其中原来的索引作为值放入DataFrame中
df.reset_index()丢弃指定轴上的项
# 丢弃轴上的某行()
df.drop(index_name)
# 丢弃某列
df.drop(column_name, axis=1/"columns")索引
针对Series
# 标签切片
ser["a":"d"]、ser[["a","c","e"]]
# 索引切片
ser[2:4]
# 布尔索引
ser[ser>0]
针对DataFrame
# 选取列
df["a"]、df[["a","c","d"]]
# 选取行
df.loc["dd"]、df.iloc[1]、df.iloc[1,2]、df.loc[["dd","cc"]]
# 选取某行某列
df.loc["dd",["a","c"]]
df.iloc[[1,2,3],[4,5,6]]
# 选取前三行
df[:3]
# 布尔索引
df[df["a"]>3]函数映射
np.abs(df)
# 将函数应用到由各列或行所形成的一维数组上(应用到行上则axis=1)
df.apply(function, axis=1)
# 作用于df中的每个元素
df.applymap(func)
# series中的map函数,应用于每个元素中
df["a'].map(func)排序
# 按照索引排序(按升降序排序)
obj.sort_index(axis=1, ascending=False)
# 按照值排序
frame.sort_values(by=['a', 'b'],ascending=False))排名
# 排名情况,相同的取均值
ser.rank()
# 原始排名情况
ser.rank(method='first')
# 按照降序排列
ser.rank(ascending=False, method='max')
# 对于dataframe多了一个axis参数
df.rank(axis=....)
2.3、汇总和计算描述
Pandas对象拥有一组常用的数学和统计方法汇总函数
主要统计一些常用的汇总函数:如平均值、标准差、方差、最大最小值、计数等相关系统和协方差
# 计算相关系数
df["a"].corr([""b])
# 计算协方差
df["a"].cov(df["b"])
# DataFrame的corr和cov方法将以DataFrame的形式分别返回完整的相关系数或协方差矩阵
df.corr()/df.cov()
# 利用DataFrame的corrwith方法,你可以计算其列或行跟另一个Series或DataFrame之间的相关系数
df.corrwith(df.IBM)唯一值及计数
# 统计唯一值
obj.unique()
# 统计各个元素出现次数(默认从大到小排序)
obj.value_counts()
# value_counts还是一个顶级pandas方法,可用于任何数组或序列
pd.value_counts(obj.values, sort=False)
# series中的值是否在序列中,返回布尔数组
ser.isin(['b', 'c'])
2.4、读取数据
在我们进行数据分析时候,需要先读取数据,一般情况下数据都保存在CSV文件、excel文件、数据库中,本文也主要介绍这三种常用的文件读取,对于其他的大家可以参考参考《利用python进行数据分析》。CSV文件操作
文件的读操作
import pandas as pd
pd.read_csv(path="",sep=",",header=None,index_col="",skiprows=[0,2,4])
其中path表示路径、sep表示分隔符、header表示是否显示头部信息、index_col表示建立索引(其中:index_col='message '将message列定义为索引,index_col=["a","b"] 建立多层索引)、skiprows=[0,2,4] 表示跳过0,2,4行数据,还有其他的一些参数,大家可以在使用中查看提示即可。
文件的写入操作
df.to_csv()
参数如下:index 表示是否加索引、header 表示是否有标头、columns=['a','b','c']定义csv文件头部名称、sep='/' 表示分隔符excel文件操作
文件读操作为
pd.read_excel('examples/ex1.xlsx', 'Sheet1')
可以看到基本的参数为文件名、sheet页名
同样,写入操作为
df.to_excel("excel_name.xlslx","sheet_name")数据库读取数据
我们以常用的mysql数据库为例,首先需要我们按照pymsql的库用来连接数据库(直接pip安装即可),读取操作为:
import pymysql
db = pymysql.connect(host="服务器ip(本地使用localhost即可)",port=3306,user='用户名',password='数据库密码',db="数据库名")
pd.read_sql("select * from taggit_tag",db)
结果如下:
操作比较简单直接使用pd.read_sql(),其中第一个参数为sql语句,第二个为连接的数据库json数据读取
对于json库笔者使用较多的就是对爬取数据的json格式解析了,本文简述json库的常用操作
具体说明如下:
import json
json.loads() # 将JSON字符串转换成Python形式
json.dumps() # 将Python形式转化成JSON字符串
pd.read_json() # 读取json格式的文件
df.to_json # 将数据从pandas输出到JSON
三、总结
本文主要是介绍了pandas的一些入门知识,都是对pandas数据结构的一些操作,后面讲解了使用pandas文件中数据的一些操作(基本上能满足我们的日常工作,如需读取其他文件格式,可以自行google),本文是pandas的一个基础入门总结,后续会整理Pandas的一些进阶的知识。
更多Pandas操作: