前言 使用pandas以及一些概念
前面已经系统的学习使用过mumpy,测试过了matplotlib。python数据分析三剑客numpy,pandas,matplotlib,本篇文章为pandas系列第一章,记述使用pandas过程中的问题。
pandas的一些说明
Pandas处理以下三个数据结构
- 系列(Series) Series 系列关键点:
- 均匀数据
- 尺寸大小
- 不变数据的值可变
- 数据帧(DataFrame) dataframe 关键点:
- 异构数据
- 大小可变
- 数据可变
- 面板(Panel) 面板是具有异构数据的三维数据结构。在图形表示中很难表示面板。但是一个面板可以说明为DataFrame的容器。关键点:
- 异构数据
- 大小可变
- 数据可变
维数和描述考虑这些数据结构的最好方法是,较高维数据结构是其较低维数据结构的容器。 例如,DataFrame是Series的容器,Panel是DataFrame的容器。
数据结构 | 维数 | 描述 |
---|---|---|
系列 | 1 | 1D标记均匀数组,大小不变 |
数据帧 | 2 | 一般2D标记,大小可变的表结构与潜在的异质类型的列。 |
面板 | 3 | 一般3D标记,大小可变数组 |
构建和处理两个或更多个维数组是一项繁琐的任务,用户在编写函数时要考虑数据集的方向。 但是使用Pandas数据结构,减少了用户的思考。
1. 安装
pip3 install pandas
2. 检测
>>> import pandas as pd
>>> pd.__version__
'0.24.2'
- 创建Series对象
>>> s = pd.Series([12,3,4,np.nan,4,7])
>>> s
0 12.0
1 3.0
2 4.0
3 NaN
4 4.0
5 7.0
dtype: float64
>>> type(s)
<class 'pandas.core.series.Series'>
- 带有日期时间标签的DataFrame对象
>>> dates = pd.date_range('20130101', periods=6)
>>> dates
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
'2013-01-05', '2013-01-06'],
dtype='datetime64[ns]', freq='D')
dt = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('abcd'))
>>> dt
a b c d
2013-01-01 3.037169 -0.858770 0.146364 -0.095942
2013-01-02 0.537527 0.726589 -0.096588 -0.210670
2013-01-03 0.797981 1.234482 -0.742337 -0.884175
2013-01-04 0.354584 -0.321732 -0.692533 -1.058125
2013-01-05 -1.010910 2.169853 -0.681772 -0.237849
2013-01-06 -0.016872 -0.532582 -1.274204 -1.907988
- 通过传递可以转换为类似系列的对象的字典来创建DataFrame。使用这个dict对象变为数组:
df2 = pd.DataFrame({ 'A' : 1.,
'B' : pd.Timestamp('20170102'),
'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' : 'foo' })
# 头
print(df2.head())
# 尾数据
print(df2.tail(3))
# 索引
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_values(by='B'))
# 获取区块,索引一部分数据,按照列索引数据,分片获取位置
- 可以看到不同的数据类型:
>>> dt.dtypes
1 int64
2 float64
3 float64
4 object
dtype: object
- 选择和赋值标准的python、numpy表达式非常直观,并且便于交互工作.但是生产环境,我们推荐使用优化的pandas访问数据方法 .at .iat .loc .iloc等方法参考数据文档索引,选择数据,多索引,高级索引
# 使用下面的方式相当于生成一个series
print(df2['A'])
# 使用索引切片,[0:3]
# 打印2行数据
print(df2[0:2])
# 指定日期
dates = pd.date_range('20170101', periods=6)
df2 = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
# 使用索引字段,分片索引数据
print(df2['20170102':'20170103'])
# 通过标签获取一整行的数据
df.loc[dates[0]]
# 通过标签选择多个轴上的数据
df.loc[:,['A','B']]
# 通过标签同时在两个轴上切片
df.loc['20170101':'20170103',['A','B']]
# 减少返回的对象大小
df.loc['20170101',['A','B']]
# 获取标量值
df.loc[dates[0],'A']
# 快速访问at
df.at[dates[0],'A']
# 按照位置选择 iloc
df.iloc[3]
# 通过整数切片
df.iloc[3:5,0:2]
# 通过整数位置获取分片参数
df.iloc[[1,2,4],[0,2]]
# 整行的切片
df.iloc[1:3,:]
# 整列切片
df.iloc[:,1:3]
# 获取具体位置
df.iloc[1,1]
# 布尔值索引
df[df.A >0]
网友评论