Pandas 用法汇总
一、生成数据表
1、首先导入pandas 库,一般会用到 numpy 库,所以我们先导入备用:
import numpy as np import pandas as pd
2、生成 CSV 或者 xlsx 文件:
df = pd.DataFrame(pd.read_csv( 'name.csv', header = )) df = pd.DataFrame(pd.read_excel('name.xlsx'))
3、用 pandas 创建数据表:
import numpy as np
import pandas as pd df = pd.DataFrame({"id":[,,,,,],
"date":pd.date_range('', periods=),
"city":['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],
"age":[,,,,,],
"category":['100-A','100-B','110-A','110-C','210-A','130-F'],
"price":[,np.nan,,,np.nan,]},
columns =['id','date','city','category','age','price'])
print(df)
id date city category age price
-- Beijing -A 1200.0
-- SH -B NaN
-- guangzhou -A 2133.0
-- Shenzhen -C 5433.0
-- shanghai -A NaN
-- BEIJING -F 4432.0
二、数据表信息查看
1、维度查看:
df.shape
( , )
2、数据表基本信息(维度,列名称,数据格式, 所占空间):
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: entries, to
Data columns (total columns):
id non-null int64
date non-null datetime64[ns]
city non-null object
category non-null object
age non-null int64
price non-null float64
dtypes: datetime64[ns](), float64(), int64(), object()
memory usage: 368.0+ bytes
3、每一列的数据格式:
df.dtypes
id int64
date datetime64[ns]
city object
category object
age int64
price float64
dtype: object
4、某一列格式:
df[ 'id' ].dtype
dtype('int64')
5、空值:
df.isnull()
id date city category age price
False False False False False False
False False False False False True
False False False False False False
False False False False False False
False False False False False True
False False False False False False
6、查看某一列的空值:
df['price'].isnull()
False
True
False
False
True
False
Name: price, dtype: bool
7、查看某一列的唯一值:
df['id'].unique()
array([, , , , , ], dtype=int64)
8、查看数据表的值:
df.values
array([[, Timestamp('2013-01-02 00:00:00'), 'Beijing ', '100-A', ,
1200.0],
[, Timestamp('2013-01-03 00:00:00'), 'SH', '100-B', , nan],
[, Timestamp('2013-01-04 00:00:00'), ' guangzhou ', '110-A',
, 2133.0],
[, Timestamp('2013-01-05 00:00:00'), 'Shenzhen', '110-C', ,
5433.0],
[, Timestamp('2013-01-06 00:00:00'), 'shanghai', '210-A', ,
nan],
[, Timestamp('2013-01-07 00:00:00'), 'BEIJING ', '130-F', ,
4432.0]], dtype=object)
9、查看列名称:
df.columns
Index(['id', 'date', 'city', 'category', 'age', 'price'], dtype='object')
10、查看前10列数据、后10行数据:
df.head() // 默认前10行数据
id date city category age price
-- Beijing -A 1200.0
-- SH -B NaN
-- guangzhou -A 2133.0
-- Shenzhen -C 5433.0
-- shanghai -A NaN
df.tail() // 默认后10行数据
id date city category age price
-- SH -B NaN
-- guangzhou -A 2133.0
-- Shenzhen -C 5433.0
-- shanghai -A NaN
-- BEIJING -F 4432.0
三、数据表清洗
1、用数字 0 填充空值:
df.fillna(value = 0)
id date city category age price
-- Beijing -A 1200.0
-- SH -B 0.0
-- guangzhou -A 2133.0
-- Shenzhen -C 5433.0
-- shanghai -A 0.0
-- BEIJING -F 4432.0
2、使用列 price 的均值对 NA 进行填充:
df[ 'price' ].fillna(df['price'].mean())
1200.0
3299.5
2133.0
5433.0
3299.5
4432.0
Name: price, dtype: float64
3、清楚 city 字段的字符空格:
df[ 'city' ] = df[ 'city' ].map(str.strip)
4、大小写转换:
df[ 'city' ] = df[ 'city' ].str.lower()
id date city category age price
-- beijing -A 1200.0
-- sh -B NaN
-- guangzhou -A 2133.0
-- shenzhen -C 5433.0
-- shanghai -A NaN
-- beijing -F 4432.0
5、更改数据格式:
df[ 'price' ].astype( 'int' )
6、更改列名称:
df.rename(columns = { 'category' : 'category-size' })
id date city category-size age price
-- Beijing -A 1200.0
-- SH -B NaN
-- guangzhou -A 2133.0
-- Shenzhen -C 5433.0
-- shanghai -A NaN
-- BEIJING -F 4432.0
7、删除后出现的重复值:
df[ 'city' ].drop_duplicates()
Beijing
SH
guangzhou
Shenzhen
shanghai
BEIJING
Name: city, dtype: object
8、删除先出现的重复值:
df[ 'city' ].drop_duplicates(keep = 'last' )
Beijing
SH
guangzhou
Shenzhen
shanghai
BEIJING
Name: city, dtype: object
9、数据替换:
df[ 'city' ].replace( 'sh' , 'shanghai' )
四、数据预处理
df1=pd.DataFrame({ "id":[,,,,,,,],
"gender":['male','female','male','female','male','female','male','female'],
"pay":['Y','N','Y','Y','N','Y','N','Y',],
"m-point":[,,,,,,,]})
1、数据表合并:
1.1merge
df_inner = pd.merge(df, df1, how = 'inner') # 匹配合并 交集
id date city category age price gender pay m-point
-- Beijing -A 1200.0 male Y
-- SH -B NaN female N
-- guangzhou -A 2133.0 male Y
-- Shenzhen -C 5433.0 female Y
-- shanghai -A NaN male N
-- BEIJING -F 4432.0 female Y
df_left = pd.merge(df, df1, how = 'left') id date city category age price gender pay m-point
-- Beijing -A 1200.0 male Y
-- SH -B NaN female N
-- guangzhou -A 2133.0 male Y
-- Shenzhen -C 5433.0 female Y
-- shanghai -A NaN male N
-- BEIJING -F 4432.0 female Y
df_right = pd.merge(df, df1, how = 'right')
df_outer = pd.merge(df, df1, how = 'outer') # 并集 输出结构同上
1.2 append
result = df1.append(df2)
1.3 join
reault = left.join( right, on='key' )
1.4 concat
pd.concat(
objs,
axis=,
join = 'outer',
join_axes = None,
ignore_index = False,
keys = None,
levels = None,
names=None,
verify_integrity=false,
copy = True)
objs;一个序列系列、综合或面板对象的映射。如果字典中传递,将作为键参数,使用序的键,除非它传递,在这种情况下的值将会选择(见上下文)。任何没有任何反对将默默的的丢弃,除非他妈嗯都没有在这种情况下将引发 VslueError。
axis:{0,1,2,...},默认值为0,要连接沿轴。
join:{‘内部’、‘外’},默认 ‘外’。如何处理其他axis(es)上的索引。联盟内,外的交叉口。
ignore_index︰ 布尔值、 默认 False。如果为 True,则不要串联轴上使用的索引值。由此产生的轴将标记 0,…,n-1。这是有用的如果你串联串联轴没有有意义的索引信息的对象。请注意在联接中仍然受到尊重的其他轴上的索引值。
join_axes︰ 索引对象的列表。具体的指标,用于其他 n-1 轴而不是执行内部/外部设置逻辑。
keys︰ 序列,默认为无。构建分层索引使用通过的键作为最外面的级别。如果多个级别获得通过,应包含元组。
levels︰ 列表的序列,默认为无。具体水平 (唯一值) 用于构建多重。否则,他们将推断钥匙。
names︰ 列表中,默认为无。由此产生的分层索引中的级的名称。
verify_integrity︰ 布尔值、 默认 False。检查是否新的串联的轴包含重复项。这可以是相对于实际数据串联非常昂贵。
副本︰ 布尔值、 默认 True。如果为 False,请不要,不必要地复制数据。
例子:
1、frames = [df1, df2, df3]
2、result = pd.concat(frames)
2、设置索引列
df_inner.set_index('id')
date city category age price gender pay m-point
id
-- Beijing -A 1200.0 male Y
-- SH -B NaN female N
-- guangzhou -A 2133.0 male Y
-- Shenzhen -C 5433.0 female Y
-- shanghai -A NaN male N
-- BEIJING -F 4432.0 female Y
3、按照特定列的值排序:
df_inner.sort_values(by = [‘age’])
id date city category age price gender pay m-point
-- Beijing -A 1200.0 male Y
-- Shenzhen -C 5433.0 female Y
-- BEIJING -F 4432.0 female Y
-- shanghai -A NaN male N
-- SH -B NaN female N
-- guangzhou -A 2133.0 male Y
4、按照索引排序:
df_inner.sort_index()
id date city category age price gender pay m-point
-- Beijing -A 1200.0 male Y
-- SH -B NaN female N
-- guangzhou -A 2133.0 male Y
-- Shenzhen -C 5433.0 female Y
-- shanghai -A NaN male N
-- BEIJING -F 4432.0 female Y
5、如果price列的值 > 3000, group列显示 high,否则显示 low:
df_inner['group'] = np.where(df_inner['price'] > 3000,'high','low')
id date city category age price gender pay m-point group
-- Beijing -A 1200.0 male Y low
-- SH -B NaN female N low
-- guangzhou -A 2133.0 male Y low
-- Shenzhen -C 5433.0 female Y high
-- shanghai -A NaN male N low
-- BEIJING -F 4432.0 female Y high
6、对符合多个条件的数据进行分组标记:
df_inner.loc[(df_inner['city'] == 'beijing')&(df_inner['price'] >= 4000), 'sign'] = 1
id date city category age price gender pay m-point group sign
-- Beijing -A 1200.0 male Y low NaN
-- SH -B NaN female N low NaN
-- guangzhou -A 2133.0 male Y low NaN
-- Shenzhen -C 5433.0 female Y high NaN
-- shanghai -A NaN male N low NaN
-- BEIJING -F 4432.0 female Y high NaN
7、对category字段的值依次进行分列,并创建数据表,索引值为 df_inner 的索引列,列名称为 category 和 size
pd.DataFrame((x.split(‘-‘) for x in df_inner[‘category’]),index=df_inner.index,columns=[‘category’,’size’]))
8、将完成分裂的数据表和原df_inner 数据表进行匹配:
df_inner=pd.merge(df_inner,split,right_index=True, left_index=True)
五、数据提取
主要用到三个函数: loc、iloc 和 ix。
loc 函数按标签值进行提取
iloc 按位置进行提取
ix 可以同时按标签和位置进行提取
1、按索引提取单行的数值
df_inner.loc[3]
id
date -- ::
city Shenzhen
category -C
age
price
gender female
pay Y
m-point
group high
sign NaN
Name: , dtype: object
2、按索引提取区域行数值
df_inner.iloc[0:3]
id date city category age price gender pay m-point group sign
-- Beijing -A 1200.0 male Y low NaN
-- SH -B NaN female N low NaN
-- guangzhou -A 2133.0 male Y low NaN
3、重设索引:
df_inner.reset_index()
4、设置日期为索引:
df_inner = df_inner.set_index( 'date' )
5、提取 4 日之前的所有数据
df_inner[: '2013-01-04']
6、使用 iloc 按位置区域提取数据:
df_inner.iloc[:3, :2] # 冒号前后的数字不在是索引的标签名称,而是数据所在的位置,从0 开始,前三行,前两行。
7、适应 iloc 按位置单独提起数据:
df_inner.iloc[[0, 2, 5], [4, 5]] # 提取 0、2、5行,4、5列
8、使用 ix 按索引标签和位置混合提取数据
df_inner[: '2013-01-03', :4] # 2013-01-03 好之前,前四列的数据
9、判断city列的值是否为北京
df_inner['city'].isin(['beijing'])
10、判断 city 列里是否包含bejing 和 shanghai,然后将符合条件的数据提取出来
df_inner.loc[df_inner[ 'city' ].isin([ 'beijing' , 'sahnghai' ] )]
11、提取前三个字符,并生成数据表
pd.DataFrame(category.str[:3])
六、数据筛选
使用与、或、非 三个条件配合大于、小于、等于对数据进行筛选,并进行计数和求和。
1、使用“与” 进行筛选
df_inner.loc(df_inner['age'] > 25)&(df_inner['city'] == 'beijing'),['id','city','age','category','gender'] ]
2、使用 “或”进行删选
df_inner.loc[(df_inner['age']>25) | (df_inner['city' ] == 'beijing'),['id','city','age','category','gender']].sort(['age'])
3、使用 ‘非’ 条件进行筛选
df_inner.loc[(df_inner['city'] != 'beijing'),['id','city','age','category','gender']].sort(['id'])
4、对筛选后的数据按city列进行计数:
df_inner.loc[(df_inner['city'] != 'beijing').['id','city','age','category','gender']].sort(['id']).city.count()
5、使用query函数进行筛选
df_inner.query('city==['beijing','shanghai']')
6、对筛选后的结果按price进行求和
df_inner.query('city ==['beijing', 'shanghai']').price.sum()
七、数据汇总
主要函数是groupby 和 pivote_table
1、对所有的列进行计数汇总
df_inner.groupby('city').count()
2、按城市对 id 字段进行计数
df_inner.groupby('city')['id'].count()
3、对两个字段进行汇总计数
df_inner.groupby(['city', 'size'])['id'].count()
4、对city字段进行汇总,并分别计算price 的合计和均值
df_inner.groupby('city')['price'].agg([len, np.su, np.mean])
八、数据统计
数据采样,计算标准差、协方和相关系数
1、简单的数据采样
df_inner.sample(n = 3)
2、手动设置采样权重
weights = [0, 0, 0, 0, 0.5, 0.5]
df_inner.sample(n = 6, replace = False)
3、采样后不放回
df_inner.sample(n=6, replace = False)
4、采样后放回
df_inner.sample(n = 6, replace = False)
5、数据表描述性统计
df_inner.describe().round(2).T # round 函数是设置小数位,T表示转置
6、 计算列的标准差
df_inner[ 'price' ].std()
7、计算两个字段间的协方差
df_inner['price'].cov(df_inner['m-point'])
8、数据表中所有的字段间的协方差
df_inner.cov()
9、两个字段间的相关性分析
df_inner['price'].corr(df_inner['m-point']) # 相关系数在 -1 到 1 之间,接近 1 为正相关,接近 -1 为负相关, 0 为不相关
10、数据表的相关分析
df_inner.corr()
九、数据输出
分析后的数据可以输出为 xlsx 格式和 csv 格式
1、写入 Excel
df_inner.to_excel( 'excel_to_python.xlsx', sheet_name = 'bluewhale_cc')
2、写入到 CSV
df_inner.to_csv('excel_to_python.csv')
Pandas 用法汇总的更多相关文章
- pandas用法大全
pandas用法大全 一.生成数据表 1.首先导入pandas库,一般都会用到numpy库,所以我们先导入备用: import numpy as np import pandas as pd12 2. ...
- python之pandas用法大全
python之pandas用法大全 更新时间:2018年03月13日 15:02:28 投稿:wdc 我要评论 本文讲解了python的pandas基本用法,大家可以参考下 一.生成数据表1.首先导入 ...
- Python3 pandas用法大全
Python3 pandas用法大全 一.生成数据表 1.首先导入pandas库,一般都会用到numpy库,所以我们先导入备用: import numpy as np import pandas as ...
- pandas用法总结
pandas用法总结 2018年06月07日 10:49:03 一夜了 阅读数 38705更多 分类专栏: 杂项 一.生成数据表 1.首先导入pandas库,一般都会用到numpy库,所以我们先导 ...
- pandas用法小结
前言 个人感觉网上对pandas的总结感觉不够详尽细致,在这里我对pandas做个相对细致的小结吧,在数据分析与人工智能方面会有所涉及到的东西在这里都说说吧,也是对自己学习的一种小结! pandas用 ...
- Linux中find命令的用法汇总
Linux中find命令的用法汇总 https://www.jb51.net/article/108198.htm
- Python Enum 枚举 用法汇总
Python Enum 枚举 用法汇总 import os import sys if sys.version_info.major + sys.version_info.minor * 0.1 &l ...
- C#中DllImport用法汇总
最近使用DllImport,从网上google后发现,大部分内容都是相同,又从MSDN中搜集下,现将内容汇总,与大家分享. 大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比 ...
- 前置机器学习(四):一文掌握Pandas用法
Pandas提供快速,灵活和富于表现力的数据结构,是强大的数据分析Python库. 本文收录于机器学习前置教程系列. 一.Series和DataFrame Pandas建立在NumPy之上,更多Num ...
随机推荐
- SpringCloud项目实战
在工作业余时间,自学了SpringCloud的基本组件:Eureka.Ribbo.Feign.Zuul.Config.Bus,是时候操练一下自己所学的这些知识了,记录一下自己的学习过程. 一.目录结构 ...
- 关于C语言gets()函数
看这里就好了: 1.https://www.quora.com/Why-is-it-unsafe-using-gets-in-C-C++ 2.https://stackoverflow.com/que ...
- 《创业者技能树》--创业课--14天复盘第一课candy2--HHR计划
1,厉害的人是如何分析问题的?
- 洛谷P1144最短路计数
题目描述 给出一个NNN个顶点MMM条边的无向无权图,顶点编号为1−N1-N1−N.问从顶点111开始,到其他每个点的最短路有几条. 输入格式 第一行包含222个正整数N,MN,MN,M,为图的顶点数 ...
- 对于java中反编译命令的使用以及Integer包装类的查看
Integer是基于int的包装类 我们可以用测试代码来看看Integer类是如何实现装箱和拆箱的 public class BoxAndUnbox { /** * @param args */ pu ...
- C++判断txt文件编码格式
转载:https://blog.csdn.net/kikityan/article/details/89923808 记事本打开txt文件,然后另存,有四种编码格式可供选择,分别是:ANSI ...
- 【PAT甲级】1057 Stack (30 分)(分块)
题意: 输入一个正整数N(<=1e5),接着输入N行字符串,模拟栈的操作,非入栈操作时输出中位数.(总数为偶数时输入偏小的) trick: 分块操作节约时间 AAAAAccepted code: ...
- 【PAT甲级】1045 Favorite Color Stripe (30 分)(DP)
题意: 输入一个正整数N(<=200),代表颜色总数,接下来输入一个正整数M(<=200),代表喜爱的颜色数量,接着输入M个正整数表示喜爱颜色的编号(同一颜色不会出现两次),接下来输入一个 ...
- thymeleaf模板引擎简介
一:thymeleaf 学习笔记---http://www.blogjava.net/bjwulin/articles/395185.html thymeleaf是一个支持html原型的自然引擎,它在 ...
- 中国5G,如何避免重复投资?
前不久,工信部正式向中国移动.中国联通.中国电信发放5G商用牌照,此举意味着中国提前启动5G商用计划,随之而来的,将会是运营商.设备商大规模的投资.相关数据机构预测,三大运营商2019年预计会投入30 ...