Pandas 是非常著名的开源数据处理库,其基于 NumPy 开发,该工具是 Scipy 生态中为了解决数据分析任务而设计。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的函数和方法。本文是学习相关课程之后,做的些许笔记。😀😀😀
Pandas数据类型
pandas主要数据类型
//主要使用
Series(一维数组)
DataFrame(二维数组)
//次要使用
Panel(三维数组)
Panel4D(四维数组)
PanelND(更多维数组)
导入pandas库
%matplotlib inline
import pandas as pd
创建Pandas基本数据结构
Series
pandas.Series(data=None, index=None)
//数据只有列索引
//data 可以是字典,或者NumPy 里的 ndarray 对象
//index 是数据索引,索引是Pandas数据结构中的一大特性,它主要的功能是帮助我们更快速地定位数据
示例:
//通过字典创建series结构
a=pd.Series({'x':6,'y':66,'z':666})
结果:
x 6
y 66
z 666
dtype: int64 //此处默认为int64数据类型
//通过ndarray对象创建series结构
示例:
a=pd.Series(np.random.randint(1,6,6))
结果:
0 2
1 5
2 1
3 4
4 5
5 4
dtype: int64
DataFrame
//数据不但具有行索引,且具有列索引。
pandas.DataFrame(data=None, index=None, columns=None)
//一维数组、列表、字典或者 Series 字典。
示例1:Series 字典。
a=pd.DataFrame({'x':pd.Series((1,2,3)),'y':pd.Series((4,5,6))})
结果:
x y
0 1 4
1 2 5
2 3 6
示例2:列表
a=pd.DataFrame({'one': [1, 2, 3],'two': [4, 5, 6]})
结果:
one two
0 1 4
1 2 5
2 3 6
示例3:带字典的列表
a = pd.DataFrame([{'x': 1, 'y': 4}, {'x': 2, 'y': 5}, {'x': 3, 'y': 6}])
结果:
x y
0 1 4
1 2 5
2 3 6
//二维或者结构化的 numpy.ndarray。
示例:
pd.DataFrame(np.random.randint(1,6,6).reshape(2,3))
结果:
0 1 2
0 3 2 5
1 1 2 2
//一个 Series 或者另一个 DataFrame。
DataFrame与Series二者的核心区别:Series没有列索引
Pandas读取数据
读取数据 CSV 文件
pandas.read_csv()
//括号内直接传入一个相对路径,或者是网络 URL。
// CSV 存储时是一个二维的表格,Pandas 会自动将其读取为 DataFrame 类型
//pd.read_ 前缀开始的方法还可以读取各式各样的数据文件,且支持连接数据库。
DataFrame 的基本操作
DataFrame 结构大致由 3 部分组成,分别是列名、索引和数据。
//基本操作
data.head() //默认显示前五条,数字可变
data.tail(6) //显示后面六条
data.describe() //当于对数据集进行概览,会输出该数据集每一列数据的计数、最大值、最小值等
data.values() //将 DataFrame 转换为 NumPy 数组。
data.index // 查看索引
data.columns // 查看列名
data.shape // 查看形状
数据选择data.iloc方法
//数据预处理,将需要的某些行、列,或者数据块保留下来,输出到下一个流程中去。
data.iloc[[row],[column]] //如果有切片则不需加中括号。
参数可有:
//整数。例如:6
//整数构成的列表或数组。例如:[6,7,8]
//布尔数组。
//可返回索引值的函数或参数。
示例:
data.iloc[6] //选取数据表的第六行数据
data.iloc[:6] //选取数据表的前6行数据
data.iloc[[1,6]] //选取数据表的1、6行数据
data.iloc[0:6,[3,6]] //选取数据表的1-6行、3和6列的并集数据
数据选择data.loc[]方法
//直接根据标签对应的名称选择
data.loc[]方法
//单个标签。例如:6 或 'a',这里的 6 指的是标签而不是索引位置。
//列表或数组包含的标签。例如:['A', 'B', 'C']。
//切片对象。例如:'A':'D',注意这里和上面切片的不同,首尾都包含在内。
//布尔数组。
//可返回标签的函数或参数。
//具体实现与.iloc类似
数据删除
//.drop 开头的方法都与数据删减有关。
//指定 labels 标签参数,然后再通过 axis 指定按列或按行删除
data.drop(labels=['标签1','标签2'], axis=1)
数据去重
//一般用法
data.drop_duplicates()
data.drop_duplicates()详解
删除数据表中的空白值
data.dropna()
data.dropna()详解
数据填充
//Pandas将不同类型数据的缺失均采用 NaN(Not a Number)标记。
在时间序列里,时间戳的丢失采用 NaT 标记。
//检测缺失值
data.isna() & data.notna()方法
示例:
data=pd.DataFrame(np.random.rand(6,6),columns=list('ABCDEF')) //创建二维表
data.insert(value=pd.Timestamp('2020.2.28'),loc=0,column='time') //插入一个队列,并设置时间
结果:
time A B C D E F
0 2020-02-28 0.231797 0.948753 0.325789 0.013904 0.071974 0.819722
1 2020-02-28 0.646224 0.754195 0.879891 0.272166 0.926701 0.311031
2 2020-02-28 0.959402 0.361284 0.521741 0.255729 0.855924 0.154783
3 2020-02-28 0.783390 0.014677 0.257843 0.484230 0.675610 0.372432
4 2020-02-28 0.586522 0.214158 0.353357 0.431891 0.363954 0.268139
5 2020-02-28 0.894166 0.309564 0.888381 0.261137 0.641602 0.100818
data.iloc[[1,3,5],[1,3,5]]=np.nan //将2、4、6行与2、4、6列的并集设置为缺失值
结果:
data.isna()
结果:
data.fillna(0) //用0填充
结果:
//通过参数,将缺失值前面或者后面的值填充给相应的缺失值
data.fillna(method='pad') //前面
data.fillna(method='bfill') //后面
前面填充结果:
data.fillna(df.mean()['A':'E'])//A到E列缺失的,用该列的平均值填充
插值填充
data.interpolate() //尽量去还原数据本身
//如果你的数据增长速率越来越快,可以选择 method='quadratic'二次插值。
//如果数据集呈现出累计分布的样子,推荐选择 method='pchip'。
//如果需要填补缺省值,以平滑绘图为目标,推荐选择 method='akima'。
//环境中需要安装Scipy库
Pandas数据可视化
调用 Matplotlib 接口绘制常见的图形
data_interpolate = data.interpolate()
data_interpolate.plot()//默认线形图
//其他图形指定kind参数即可
示例:
data_interpolate.plot(kind='bar')
其他常用
//数据计算,例如:DataFrame.add 等。
//数据聚合,例如:DataFrame.groupby 等。
//统计分析,例如:DataFrame.abs 等。
//时间序列,例如:DataFrame.shift 等。
Pandas官网链接:Pandas官网链接