pandas入门指南

上一篇讲了numpy,除此之外,还有一个工具我们一定会使用,那就是pandas。如果说numpy中数据存储形式是列表的话,那么pandas中数据的存储形式更像是字典。为什么这么说呢?因为pandas中的数据每一行每一列都有名字,而numpy中没有。本文主要介绍pandas的基本使用方法,更多高级用法大家可以参考 pandas官方文档

一、pandas的安装及导入

安装:命令行中输入以下代码

pip3 install pandas

导入:为了简便,这里使用pd作为pandas的缩写(因为pandas依赖numpy,所以在使用之前需要安装和导入numpy)

import numpy as np import pandas as pd 二、新建pandas列表、矩阵及其属性

创建方法:
pd.Series:创建pandas列表
pd.date_range:创建pandas日期列表
pd.DataFrame:创建pandas矩阵
矩阵属性
dtypes:数据类型
index:行名
columns:列名
values:数据值
describe():实值数据列的统计数据
T:矩阵的倒置
sort_index(axis=, ascending=):矩阵排序{axis:0(行排序),1(列排序)}{ascending:True(升序),False(降序)}
sort_values(by=, ascending=):按某一列的值排序{by:列名}

s = pd.Series([1, 3, 6, np.nan, 23, 3]) dates = pd.date_range('20180708', periods=6) df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=['a', 'b', 'c', 'd']) df2 = pd.DataFrame({ 'a':pd.Series([1, 2, 3, 4]), 'b':pd.Timestamp('20180708'), 'c':pd.Categorical(['cate1', 'cate2', 'cate3', 'cate4']) }) print(df2) print(df2.dtypes) print(df2.index) print(df2.columns) print(df2.values) print(df2.describe()) print(df2.T) print(df2.sort_index(axis=1, ascending=False)) print(df2.sort_index(axis=0, ascending=False)) print(df2.sort_values(by='a', ascending=False)) 三、pandas选择数据

.列名:选择某一列
[列名]:选择某一列
[start : end]:选择行索引以start开头,end - 1结尾的数据
[行名start:行名end]:选择行名以start开头,end结尾的数据
loc[行名选择, 列名选择]:根据行名和列名选择数据
iloc[行索引选择, 列索引选择]:根据行索引和列索引选择数据
ix[行 名/索引 选择,列 名/索引 选择]:混合 名/索引 选择数据
[布尔表达式]:根据布尔表达式结果选择数据,只有当布尔表达式为真时的数据才会被选择

dates = pd.date_range('20180709', periods=3) df = pd.DataFrame(np.arange(12).reshape((3, 4)), index=dates, columns=['A', 'B', 'C', 'D']) print(df.A) print(df['A']) print(df[2:3]) print(df['20180709':'20180710']) # loc: select by label print(df.loc['20180711']) print(df.loc[:,['B','C']]) # iloc : select by position print(df.iloc[1:3, 2:4]) print(df.iloc[[0, 2], 2:4]) # ix : mixed selection print(df.ix[[0, 2], ['B']]) # Boolean indexing print(df[df.A > 3]) 四、pandas设置数据值

首先选择数据,然后直接通过赋值表达式,即可将选择的数据设置为相应的值

dates = pd.date_range('20180709', periods=3) df = pd.DataFrame(np.arange(12).reshape((3, 4)), index=dates, columns=['A', 'B', 'C', 'D']) df.loc['20180709', 'B'] = 666 df.iloc[2, 2] = 999 df.ix['20180709', 3] = 777 df.A[df.A > 3] = 888 df['F'] = np.nan print(df) 五、pandas处理NaN值

dropna(axis=, how=):丢弃NaN数据,{axis:0(按行丢弃),1(按列丢弃)} {how:'any'(只要含有NaN数据就丢弃),'all'(所有数据都为NaN时丢弃)}
fillna(value=):将NaN值都设置为value的值
isnull():对每各元素进行判断是否是NaN,返回结果矩阵
np.any(matrix) == value:判断matrix矩阵中是否有value值
np.all(matrix) == value:判断matrix矩阵中是否所有元素都是value值

dates = pd.date_range('20180709', periods=5) df = pd.DataFrame(np.arange(20).reshape((5, 4)), index=dates, columns=['A', 'B', 'C', 'D']) df.iloc[3, 3] = np.nan print(df.dropna(axis=1, how='all')) # how = {'any', 'all'} print(df.fillna(value=666)) print(df.isnull()) print(np.any(df.isnull()) == True) print(np.all(df.isnull()) == True) 六、pandas读取数据、导出数据

根据数据的格式,pandas提供了多种数据读取和导出的方法,如:
读取数据:read_csv、read_table、read_fwf、read_clipboard、read_excel、read_hdf
导出数据:to_csv、to_table、to_fwf、to_clipboard、to_excel、to_hdf

df = pd.read_csv('Q1.csv') print(df) df.to_csv('Q1_pandas.csv') 七、pandas合并数据

concat方法
第一个参数:需要合并的矩阵
axis:合并维度,0:按行合并,1:按列合并
join:处理非公有 列/行 的方式,inner:去除非公有的 列/行,outer:对非公有的 列/行 进行NaN值填充然后合并
ignore_index:是否重排行索引

df1 = pd.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D'], index=[0, 1, 2]) df2 = pd.DataFrame(np.ones((3, 4)), columns=['B', 'C', 'D', 'E'], index=[1, 2, 3]) print(pd.concat([df1, df2], join='outer', ignore_index=True)) # join = {'outer', 'inner'} print(pd.concat([df1, df2], axis=1, join_axes=[df1.index])) print(df1.append([df2], ignore_index=True))

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxswg.html