pandas总结
### 一.创建对象
#
1
.可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引:
# s=pd.Series([
1
,
3
,
5
,np.nan,
6
,
8
])
# print(s)
#
#
2
.通过传递一个numpy array,时间索引以及列标签来创建一个DataFrame:
# dates=pd.date_range(
'20130101'
,periods=
6
)
# print(dates)
# df=pd.DataFrame(np.random.randn(
6
,
4
),index=dates,columns=list(
'ABCD'
))
# print(df)
#
#
3
.通过传递一个能够被转换成类似序列结构的字典对象来创建一个DataFrame:
# df2=pd.DataFrame({
'A'
:
1
,
'B'
:pd.Timestamp(
'20130102'
),
#
'C'
:pd.Series(
1
,index=list(range(
4
)),dtype=
'float32'
),
#
'D'
:np.array([
3
]*
4
,dtype=
'int32'
),
#
'E'
:pd.Categorical([
'test'
,
'train'
,
'test'
,
'train'
]),
#
'F'
:
'fool'
# })
# print(df2)
#
4
.查看不同列的数据类型:
# print(df2.dtypes)
#
#
### 二.查看数据
#
1
.查看frame中头部和尾部的行:
# print(df.head(
1
))
# print(df.tail(
1
))
#
#
2
.显示索引、列和底层的numpy数据:
# print(df.index)
# print(df.columns)
# print(df.values)
#
#
3
.describe()函数对于数据的快速统计汇总:
# print(df.describe())
#
#
4
.对数据的转置:
# print(df.T)
#
#
5
.按轴进行排序
#print(df.sort_index(axis=
1
,ascending=False))
#
#
6
.按值进行排序
# print(df.sort(columns=
'B'
))
#
#
### 三.选择
# NO1.获取
#
1
. 选择一个单独的列,这将会返回一个Series,等同于df.A:
# print(df[
'A'
])
#
#
2
.通过[]进行选择,这将会对行进行切片
# print(df[:
3
]) # 其中
0
可以省略 print(df[
0
:
3
])
#
# NO2.通过标签选择
#
1
.使用标签来获取一个交叉的区域
# print(df.loc[dates[
0
]])
#
#
2
.通过标签来在多个轴上进行选择
# print(df.loc[:,[
'A'
,
'B'
]])
#
#
3
.标签切片
# print(df.loc[
'20130102'
:
'20130104'
,[
'A'
,
'B'
]])
#
#
4
.对于返回的对象进行维度缩减
# print(df.loc[
'20130101'
,[
'A'
,
'B'
]])
#
#
5
.获取一个标量
# print(df.loc[dates[
0
],
'A'
])
#
#
6
.快速访问一个标量(与上一个方法等价)
# print(df.at[dates[
0
],
'A'
])
#
# NO3.通过位置选择
#
1
.通过传递数值进行位置选择(选择的是行)
# print(df.iloc[
3
])
#
#
2
.通过数值进行切片,与numpy/python中的情况类似
# print(df.iloc[
3
:
5
,
0
:
2
])
#
#
3
.通过指定一个位置的列表,与numpy/python中的情况类似
# print(df.iloc[[
1
,
2
,
4
],[
0
,
2
]])
#
4
.对行进行切片
# print(df.iloc[
1
:
3
,:])
#
#
5
.对列进行切片
# print(df.iloc[:,
1
:
3
])
#
#
6
.获取特定的值
# print(df.iloc[
1
,
1
])
#
# NO4.布尔索引
#
1
.使用一个单独列的值来选择数据:
# print(df[df.A>
0
])
#
#
2
.使用where操作来选择数据:
# print(df[df>
0
])
#
#
3
.使用isin()方法来过滤:
# df2=df.copy()
# df2[
'E'
]=[
'one'
,
'one'
,
'one'
,
'one'
,
'one'
,
'two'
]
# print(df2)
#
# NO5.设置
#
1
.设置一个新的列:
# s1=pd.Series([
1
,
2
,
3
,
4
,
5
,
6
],index=pd.date_range(
'20130101'
, periods=
6
))
# print(s1)
# df[
'F'
]=s1
# print(df)
#
#
2
.通过标签设置新的值:
# df.at[dates[
0
],
'A'
]=
0
# print(df)
#
#
3
.通过位置设置新的值:
# df.iat[
0
,
1
]=
0
# print(df)
#
#
4
.通过一个numpy数组设置一组新值:
# df.loc[:,
'D'
]=np.array([
5
]*len(df))
# print(df)
#
#
5
.通过where操作来设置新的值:
# df2=df.copy()
# df2[df2>
0
]=-df2
# print(df2)
#
#
### 四.缺失值处理
# 在pandas中,使用np.nan来代替缺失值,这些值将默认不会包含在计算中,详情请参阅:Missing Data Section。
#
#
1
.reindex()方法可以对指定轴上的索引进行改变/增加/删除操作,这将返回原始数据的一个拷贝:、
#
# df1=df.reindex(index=dates[
0
:
4
],columns=list(df.columns)+[
'E'
])
# print(df1)
#
#
2
.去掉包含缺失值的行:
# df1.dropna(how=
'any'
,inplace=True)
# print(df1)
#
#
3
.对缺失值进行填充:
# df1=df1.fillna(value=
5
)
# print(df1)
#
#
4
.对数据进行布尔填充:
# print(pd.isnull(df1))
#
#
### 五.相关操作
# 详情请参与 Basic Section On Binary Ops
#
# NO1.统计(相关操作通常情况下不包括缺失值)
#
1
.执行描述性统计:
# print(df.mean())
#
#
2
.在其他轴上进行相同的操作:
# print(df.mean(
1
))
#
#
3
.对于拥有不同维度,需要对齐的对象进行操作。Pandas会自动的沿着指定的维度进行广播:
# s=pd.Series([
1
,
3
,
5
,np.nan,
6
,
8
],index=dates).shift(
2
)
# print(s)
#
# NO2.Apply
#
1
.对数据应用函数:
# print(df.apply(np.cumsum))
# print(df.apply(lambda x:x.max()-x.min()))
#
# NO3.直方图
# 具体请参照:Histogramming and Discretization
#
# s=pd.Series(np.random.randint(
0
,
7
,size=
10
))
# print(s)
# print(s.value_counts())
#
# NO4.字符串方法
# Series对象在其str属性中配备了一组字符串处理方法,可以很容易的应用到数组中的每个元素
# s=pd.Series([
'A'
,
'B'
,
'C'
,
'Bcaa'
,np.nan,
'CBA'
,
'dog'
,
'cat'
])
# print(s.str.lower())
#
#
### 六.合并
# Pandas提供了大量的方法能够轻松的对Series,DataFrame和Panel对象进行各种符合各种逻辑关系的合并操作。具体请参阅:Merging section
#
# NO1.Concat
# df=pd.DataFrame(np.random.randn(
10
,
4
))
# print(df)
# pieces=[df[:
3
],df[
3
:
7
],df[
7
:]]
# print(pd.concat(pieces))
#
# NO2.Join 类似于SQL类型的合并
# left=pd.DataFrame({
'key'
:[
'foo'
,
'foo'
],
'lval'
:[
1
,
2
]})
# right=pd.DataFrame({
'key'
:[
'foo'
,
'foo'
],
'rval'
:[
4
,
5
]})
#
# print(left)
# print(right)
#
# mid=pd.merge(left,right,on=
'key'
)
# print(mid)
#
# NO3.Append 将一行连接到一个DataFrame上
# df=pd.DataFrame(np.random.randn(
8
,
4
),columns=[
'A'
,
'B'
,
'C'
,
'D'
])
# print(df)
# s=df.iloc[
3
]
# print(s)
# df=df.append(s,ignore_index=True)
# print(df)
#
#
### 七.分组
# 对于”group by”操作,我们通常是指以下一个或多个操作步骤:
#
# NO1.(Splitting)按照一些规则将数据分为不同的组;
#
# NO2.(Applying)对于每组数据分别执行一个函数;
#
# NO3.(Combining)将结果组合到一个数据结构中;
#
# df=pd.DataFrame({
'A'
:[
'foo'
,
'bar'
,
'foo'
,
'bar'
,
'foo'
,
'bar'
,
'foo'
,
'bar'
]
# ,
'B'
:[
'one'
,
'two'
,
'two'
,
'one'
,
'one'
,
'two'
,
'one'
,
'two'
]
# ,
'C'
:np.random.randn(
8
),
'D'
:np.random.randn(
8
)})
# print(df)
#
#
1
.分组并对每个分组执行sum函数:
# print(df.groupby(
'A'
).sum())
#
#
2
.通过多个列进行分组形成一个层次索引,然后执行函数:
# print(df.groupby([
'A'
,
'B'
]).sum())
#
### 八.Reshaping
# NO1.Stack
# tuples=list(zip(*[[
'bar'
,
'bar'
,
'baz'
,
'baz'
,
'foo'
,
'foo'
,
'qux'
,
'qux'
]
# ,[
'one'
,
'two'
,
'one'
,
'two'
,
'one'
,
'two'
,
'one'
,
'two'
]]))
#
# index=pd.MultiIndex.from_tuples(tuples, names=[
'first'
,
'second'
])
# df=pd.DataFrame(np.random.randn(
8
,
2
),index=index,columns=[
'A'
,
'B'
])
# df2=df[:
4
]
# print(df2)
# print(df2.stack().unstack(
1
))
#
#
### 九.时间序列
# Pandas在对频率转换进行重新采样时拥有简单、强大且高效的功能(如将按秒采样的数据转换为按
5
分钟为单位进行采样的数据)
# rng=pd.date_range(
'1/1/2012'
,periods=
100
,freq=
'S'
)
# print(rng)
# ts=pd.Series(np.random.randint(
0
,
500
,len(rng)),index=rng)
# print(ts)
# print(ts.resample(
'5Min'
,how=
'sum'
))
#
#
1
.时区表示:
# rng=pd.date_range(
'3/6/2012 00:00'
,periods=
5
,freq=
'D'
)
# print(rng)
# ts=pd.Series(np.random.randn(len(rng)),index=rng)
# print(ts)
# ts_utc=ts.tz_localize(
'UTC'
)
# print(ts_utc)
#
#
2
.时区转换:
# print(ts_utc.tz_convert(
'US/Eastern'
))
#
#
3
.时间跨度转换:
# rng=pd.date_range(
'1/1/2012'
,periods=
5
,freq=
'M'
)
# print(rng)
# ts=pd.Series(np.random.randn(len(rng)),index=rng)
# print(ts)
# ps=ts.to_period()
# print(ps)
# print(ps.to_timestamp())
#
#
4
.时期和时间戳之间的转换使得可以使用一些方便的算术函数。
# prng=pd.period_range(
'1990Q1'
,
'2000Q4'
,freq=
'Q-NOV'
)
# print(prng)
# ts=pd.Series(np.random.randn(len(prng)),index=prng)
# print(ts)
# ts.index=(prng.asfreq(
'M'
,
'e'
)+
1
).asfreq(
'H'
,
's'
)+
8
# print(ts.head())
#
#
### 十.Categorical
# 从
0.15
版本开始,pandas可以在DataFrame中支持Categorical类型的数据
#
# df=pd.DataFrame({
'id'
:[
1
,
2
,
3
,
4
,
5
,
6
],
'raw_grade'
:[
'a'
,
'b'
,
'b'
,
'a'
,
'a'
,
'e'
]})
# print(df)
#
#
1
.将原始的grade转换为Categorical数据类型:
# df[
'grade'
]=df[
'raw_grade'
].astype(
'category'
)
# print(df)
#
#
2
.将Categorical类型数据重命名为更有意义的名称:
# df[
'grade'
].cat.categories=[
'very good'
,
'good'
,
'very bad'
]
# print(df)
#
#
3
.对类别进行重新排序,增加缺失的类别:
# df[
'grade'
]=df[
'grade'
].cat.set_categories([
'very bad'
,
'bad'
,
'medium'
,
'good'
,
'very good'
])
# print(df[
'grade'
])
#
#
4
.排序是按照Categorical的顺序进行的而不是按照字典顺序进行:
# print(df.sort(
'grade'
))
#
#
5
.对Categorical列进行排序时存在空的类别:
# print(df.groupby(
'grade'
).size())
#
#
### 十一.画图
# ts=pd.Series(np.random.randn(
1000
),index=pd.date_range(
'1/1/2012'
,periods=
1000
,freq=
'D'
))
# ts=ts.cumsum()
# ts.plot()
#
# df=pd.DataFrame(np.random.randn(
1000
,
4
),index=ts.index,columns=[
'A'
,
'B'
,
'C'
,
'D'
])
# df=df.cumsum()
# plt.figure();df.plot();plt.legend(loc=
'best'
)
#
#
### 十二.导入和保存数据
# NO1.CSV
#
1
.写入csv文件:
# df.to_csv(
'jeramy.csv'
,index=False)
#
#
2
.从csv文件中读取:
# pd.read_csv(
'jeramy.csv'
)
#
# NO2.EXCEL
#
1
.写入excel文件:
# df.to_excel(
'jeramy.xlsx'
,sheet_name=
'Sheet1'
)
#
#
2
.从excel文件中读取:
# pd.read_excel(
'jeramy.xlsx'
,
'Sheet1'
,index_col=None,na_values=[
'NA'
])
pandas总结的更多相关文章
- pandas基础-Python3
未完 for examples: example 1: # Code based on Python 3.x # _*_ coding: utf-8 _*_ # __Author: "LEM ...
- 10 Minutes to pandas
摘要 一.创建对象 二.查看数据 三.选择和设置 四.缺失值处理 五.相关操作 六.聚合 七.重排(Reshaping) 八.时间序列 九.Categorical类型 十.画图 十一 ...
- 利用Python进行数据分析(15) pandas基础: 字符串操作
字符串对象方法 split()方法拆分字符串: strip()方法去掉空白符和换行符: split()结合strip()使用: "+"符号可以将多个字符串连接起来: join( ...
- 利用Python进行数据分析(10) pandas基础: 处理缺失数据
数据不完整在数据分析的过程中很常见. pandas使用浮点值NaN表示浮点和非浮点数组里的缺失数据. pandas使用isnull()和notnull()函数来判断缺失情况. 对于缺失数据一般处理 ...
- 利用Python进行数据分析(12) pandas基础: 数据合并
pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...
- 利用Python进行数据分析(9) pandas基础: 汇总统计和计算
pandas 对象拥有一些常用的数学和统计方法. 例如,sum() 方法,进行列小计: sum() 方法传入 axis=1 指定为横向汇总,即行小计: idxmax() 获取最大值对应的索 ...
- 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作
一.reindex() 方法:重新索引 针对 Series 重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- pandas.DataFrame对行和列求和及添加新行和列
导入模块: from pandas import DataFrame import pandas as pd import numpy as np 生成DataFrame数据 df = DataFra ...
- pandas.DataFrame排除特定行
使用Python进行数据分析时,经常要使用到的一个数据结构就是pandas的DataFrame 如果我们想要像Excel的筛选那样,只要其中的一行或某几行,可以使用isin()方法,将需要的行的值以列 ...
随机推荐
- IDEA 导入jar包
项IDEA的项目中导入下载好的jar包: 在intelij IDEA 中,点击File-Project Structure,出现界面的左侧点击Modules,然后点击“+”. 然后找到你要导入的jar ...
- 编译和执行 C# 应用程序
- 网络设备驱动程序-netdevice结构体关键部分注释
仅仅做个记录,内核4.19 struct net_device { char name[IFNAMSIZ]; //网络设备的名称 struct hlist_node name_hlist; char ...
- Django drf:认证及组件、token、局部钩子源码分析
一.drf认证功能 二.token讲解 三.局部钩子源码分析 一.drf认证功能 1.认证简介: 只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录则不能查 ...
- rsync & sersync 实时同步
1.根据之前一篇关于rsync的随笔部署好rsync服务后,可以开始inotify的部署 2.sersync的部署 ①.部署服务(安装和配置过程) #Master 部署Sersync服务 mkdir ...
- editplus多行合并成一行
原文:https://www.cnblogs.com/jpfss/p/9238877.html Editplus 合并行快捷键: Ctrl+Shift+J ,选中要合并的行,再按快捷键即可
- Ubuntu系统---编译opencv程序的几种方式g++、Makefile、Cmake
Ubuntu系统---编译opencv程序的几种方式g++.Makefile.Cmake 先建立一个工程(一个文件夹),写好xxx.cpp文件,可以是多个: //----------opencv.cp ...
- Pytest命令行执行测试
Pytest命令行执行测试 from collections import namedtuple Task = namedtuple('Task', ['summary','owner','done' ...
- [ 转载 ] Java基础
1.String a = “123”; String b = “123”; a==b的结果是什么? 这包含了内存,String存储方式等诸多知识点.ans:同样序列的字符串直接量为一个实例,所以其实引 ...
- asp.net中gridview控件的一些基本使用方法
[ 转自苏飞博客]共两篇 (1)菜单目录: GridView无代码分页排序GridView选中,编辑,取消,删除GridView正反双向排序GridView和下拉菜单DropDownList结合Gri ...