Pandas的基本用法
Pandas是使用python进行数据分析不可或缺的第三方库。我们已经知道,NumPy的ndarray数据结构能够很好地进行数组运算,但是当我们需要进行为数据添加标签,处理缺失值,对数据分组,创建透视表等任务时,NumPy的的限制就非常明显了。而Pandas是在NumPy基础上建立的新程序库,提供了高效的Series和DataFrame数据结构。DataFrame本质上是一种带行列标签,支持同类型数据和缺失值的二维数组(Series是一维数组)。在此之前,”数据清洗“(Data Munging)往往要耗费人们大量的时间和精力,而Pandas给人们进行提供了一个有效的工具。
一. 导入pandas库
import pandas as pd
二. 创建Series对象
1. 通过python列表创建
data=pd.Series([1,2,3,4], index=['a','b','c','d'])
a 1
b 2
c 3
d 4
(注:Series对象和numpy数组的区别:numpy数组通过隐式定义的整数索引获取数值;而pandas的Series对象用显式定义的索引与数值关联。)
2. 通过python字典创建
data=pd.Series({'A':1,'B':2,'C':4})
A 1
B 2
C 4
三. 创建DataFrame对象
1. 通过python字典创建
data=pd.DataFrame({'a':[1,2,3],'b':'foo','c':pd.Categorical(['me','you','it'])})
a b c
0 1 foo me
1 2 foo you
2 3 foo it
2. 通过Series对象创建
series=pd.Series({'A':1,'B':2,'C':4})
data=pd.DataFrame(series, columns=['number'])
number
A 1
B 2
C 4
3. 通过由Series对象构成的字典创建
series1=pd.Series({'A':1,'B':2,'C':4})
series2=pd.Series([1,2,3,4], index=['A','B','C','D'])
data=pd.DataFrame({'number1':series1, 'number2':series2})
number1 number2
A 1.0 1
B 2.0 2
C 4.0 3
D NaN 4
4. 通过numpy二维数组创建
data=pd.DataFrame(np.random.rand(3,2), index=['a','b','c'], columns=['N1','N2'])
N1 N2
a 0.642597 0.869653
b 0.160318 0.663777
c 0.807979 0.043525
5. 从文件中读取
pd.read_excel(filepath) --- 读取excel文件
pd.read_csv(filepath, sep=', ') --- 读取csv文件,sep表示分隔符,默认以逗号分隔,可改成其他,如以tab分隔---sep='\t'
pd.read_json(filepath) --- 读取json文件
四. 查看数据的属性(attributes)
1. info() --- 查看数据属性简介,包括行列索引,数据类型,占用多少内存
2. shape --- 查看数据的形状(每个维度的大小)
3. index --- 查看Series对象和DataFrame对象的行索引
4. columns --- 查看DataFrame对象的列标签
5. values --- 查看对象的值
6. dtypes --- 查看数据类型
7. describe() --- 查看每列数据的描述统计量
五. 索引(Indexing)和切片(Slicing)
1. data.loc[row_index_name, : ] --- 显式选取某行
2. data.iloc[row_index_from_zero, : ] --- 隐式选取某行
3. data['column_name'] --- 选取某列
4. data.loc[row_index_name1: row_index_name2, : ] --- 显式选取连续的几行
5. data.iloc[row_index_from_zero1: row_index_from_zero2, : ] --- 隐式选取连续的几行
6. data.loc[ : , 'column_name1': 'column_name2'] --- 显式选取连续的几列
7. data.iloc[ : , column_index_from_zero1: column_index_from_zero2] --- 隐式选取连续的几列
8. data.loc[row_index_name1: row_index_name2, 'column_name1': 'column_name2'] --- 显式选取连续的几行几列
9. data.iloc[row_index_from_zero1: row_index_from_zero2, column_index_from_zero1: column_index_from_zero2] --- 隐式选取连续的几行几列
10. data.loc[[row_index_name1,row_index_name2, ...], :] --- 显式选取不连续的几行
11. data.iloc[[row_index_from_zero1, row_index_from_zero2, ...], :] --- 隐式选取不连续的几行
12. data.loc[ :, [column_name1, column_name2, ...]] --- 显式选取不连续的几列
13. data.iloc[ :, [column_index_from_zero1, column_index_from_zero2, ...]] --- 隐式选取不连续的几行
六. 添加数据
1. data.loc[new_row_index]=[.....] --- 添加新行
2. data['new_column_name']=[.....] --- 添加新列
3. data.insert(column_index, 'new_column_name',[...]) --- 在指定位置插入列
七. 删除数据
1. data.drop(row_index_from_zero, axis=0,inplace=True) --- 删除某行
2. data.drop('column_name', axis=1,inplace=True) --- 删除某列
八. 更改数据
1. rename(columns={'old_column_name':'new_column_name'}, inplace=True) --- 更改某个列名
2. set_index('col_name') --- 更改索引(索引变为选择的列)
3. reset_index() --- 更新索引
4. replace(old_value, new_value, inplace=True) --- 替换数据
九. 重复值
1. duplicated() --- 根据数据每一行是否有重复值,返回相应的布尔值
2. drop_duplicates() --- 返回已剔除有重复值的行的数据
十. 缺失值
1. pd.isnull(data) --- 返回一个布尔类型的掩码,标记数据是否有缺失值,如有缺失值则标记True
2. pd.notnull(data) --- 返回一个布尔类型的掩码,标记数据是否没有缺失值,如没有缺失值则标记True
3. dropna(axis=0, how='any') --- 返回剔除缺失值的数据
4. fillna(value, axis=0, method='backfill') --- 返回填充了缺失值的数据副本
十一. 唯一值
1. pd.unique(values) --- 显示唯一值
2. nunique(axis=0, dropna=True) --- 显示唯一值的个数
十二. 转换数据类型
1. astype(dtype) 注:可转换的数据类型有:int, str, float ... ;
2. pd.to_datetime(str) --- 转换成时间序列
十三. 使用掩码过滤((Mask Arrays)
1. data[mask] 注:一些条件表示方法:&(and) ,|(or),~(not),.isin(in)
十四. 排序
1. sort_index(axis=0, ascending=True) --- 按索引排序
2. sort_values(by, axis=0, ascending=True) --- 按内容排序
十五. 数据分组
1. groupby(by=None, axis=0) --- 把数据按某一列分组 注: groupby()是一个数据分组的对象,它实际上还没有进行任何计算,只是一个暂时存储的容器,要使用累计方法后才会进行计算。因此,groupby一般与累计函数搭配使用。
累计方法有:count(), mean(), median(), min(), max(), std(), prod(), sum() 等等 注:参数axis=0表示按行进行计算,axis=1表示按列进行计算,默认axis=1;如果需要对特定Series使用两个及以上的累计方法,请使用agg()。如果需要对整个DataFrame(按行或按列)使用自定义的累计方法,请使用apply()。
十六. 透视表
1. pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean') --- 以index为行索引,columns为列索引,累计方法为aggfunc,对data的values作透视表
十七. 合并数据
1. pd.concat([d1,d2], axis=0, join='outer', ignore_index=False) --- 按某一个轴的方向合并d1和d2
2. d1.merge(d2, how='inner', on=None, left_on=None, right_on=None) --- 把某一列作为键进行合并,假如两张表作为键的列名称不一致,那么可以通过设置left_on和left_on来解决
注:how可选"left", "right", "outer", "inner"
"left":类似于SQL的left outer join;
"right":类似于SQL的right outer join;
"outer":并集,类似于SQL的full outer join;
"inner":交集,类似于SQL的inner join;
3. d1.join(d2, on=None, how='left') --- 按索引合并d1和d2
十八. 分隔数据
1. str.split() --- 分割字符串
2. pd.cut(xx, bins, labels=None) --- 按组数bins给数据分区,每组的组距相同
3. pd.qcut(xx, quantiles, labels=None) --- 根据数值出现的频率进行分区,组距自动计算,确保每组的数量相同
十九. 其他
1. stack() --- 将普通索引的DataFrame转化成多级索引的Series
2. unstack() --- 将多级索引的Series转化成普通索引的DataFrame
3. value_counts() --- 统计数值出现的次数
4. str.lower() --- 转换成小写字母
5. str.upper() --- 转换成大写字母
6. str.contains(str) --- 检查是否包含某个字符
Pandas的基本用法的更多相关文章
- Pandas之groupby( )用法笔记
groupby官方解释 DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True ...
- Pandas中Loc用法总结
摘自:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html 具体用法,假设数据源为: > ...
- pandas Timestamp的用法
(Timestamp('2018-08-01 00:00:00'), <class 'pandas._libs.tslibs.timestamps.Timestamp'>) 注意这里面的T ...
- numpy和pandas和matplotlib用法
numpy result = [ [0, 10, 20, 30, 40], [10, 23, 33, 43, 53], [20, 83, 23, 55, 33], [30, 93, 44, 22, 5 ...
- python3 pandas DataFrame常见用法
df = pandas.read_clipboard() df 获取索引和值 df.index df.values DataFrame的values属性将数据以二维ndarray形式返回,dtype类 ...
- pandas的DataFrame用法
用来生成DataFrame数据 1.说明: class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=F ...
- Py修行路 Pandas 模块基本用法
pandas 安装方法:pip3 install pandas pandas是一个强大的Python数据分析的工具包,它是基于NumPy构建的模块. pandas的主要功能: 具备对其功能的数据结构D ...
- pandas.Series函数用法
class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False) e.g., ...
- python之pandas模块高级用法
一 agg,聚合,可以使用内置的函数 >>> import pandas as pd >>> import numpy as np >>> pp ...
随机推荐
- Fiddler的使用总结
关于Fiddler的使用过程中的总结: 1. 配置手机抓包的过程,以后再补充 2.使用Fiddler发送请求 1) 第一步 抓取接口,获取请求方式,以及请求参数 2) 第二步 请求接口 点击Exec ...
- Spring概述学习笔记
1.Spring概述 Spring致力于J2EE应用的各种解决方案,而不仅仅专注于某一层的方案. 可以说,Spring是企业应用开发的一站式选择,他贯穿于表现层.业务层.持久层. Spring并不想取 ...
- 阿里巴巴 Java 开发手册 (十三) 其它
1. [强制]在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度. 说明:不要在方法体内定义:Pattern pattern = Pattern.compile(规则); 2. [强制] ...
- Java自学-数组 创建数组
Java 如何创建一个数组 数组是一个固定长度的,包含了相同类型数据的 容器 步骤 1 : 声明数组 int[] a; 声明了一个数组变量. []表示该变量是一个数组 int 表示数组里的每一个元素都 ...
- Matlab工厂模式
工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类.工厂模式主要分为简单工厂模式.工厂方法模式以及抽象工厂模式. Obj.m classdef Obj ...
- bootstrap fileinput实现限制图片上传数量及如何控制分批多次上传
废话没有,直奔主题 问题点: fileinput提供了一个maxFileCount用于限制图片上传的数量,设置maxFileCount为1时,一次性选择超过一张会有如下提示: 当选择一张,不点上传,再 ...
- Spring AOP 原理的理解
>AOP基本概念 1)通知(Advice):织入到目标类连接点上的一段程序代码.通知分为五种类型: - Before:在方法被调用之前调用 - After:在方法完成后调用通知,无论方法是否执行 ...
- 编辑/etc/passwd文件进行权限升级的技巧
0x00 前言 在本文中,我们将学习“修改/etc/passwd文件以创建或更改用户的root权限的各种方法”.有时,一旦目标被攻击,就必须知道如何在/etc/passwd文件中编辑自己的用户以进行权 ...
- JS基础 浏览器弹出的三种提示框(提示信息框、确认框、输入文本框)
浏览器的三种提示框 alert() //提示信息框 confirm() //提示确认框 prompt() //提示输入文本框 1.alert( ) 提示信息框 <script> alert ...
- Mysql 常见数据类型及约束
Mysql 常见数据类型及约束 最近在跟几个不太懂技术的同事(哈哈, 其实我也不懂), 要整一个数据库项目, 然后前端, 后端, 都没有像样的, 数据输出还不是由我们控制.... 这可难受了, 然后总 ...