python 6 (最后一章)Pandas

今天到了我们学习python的最后一天,今后我会尝试开启Linux或java的学习,大家也可以向我私信大家想看什么。那么废话不多说开始我们今天的学习。

十分钟上手 Pandas 

pandas 是一个 Python Data Analysis Library

安装请参考官网的教程,如果安装了 Anaconda,则不需要安装 pandas 库。

In [1]:

%matplotlib inline
 
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

产生 Pandas 对象

pandas 中有三种基本结构:

  • Series
    • 1D labeled homogeneously-typed array
  • DataFrame
    • General 2D labeled, size-mutable tabular structure with potentially heterogeneously-typed columns
  • Panel
    • General 3D labeled, also size-mutable array

Series

一维 Series 可以用一维列表初始化:

In [2]:

s = pd.Series([1,3,5,np.nan,6,8])
 
print s
0     1
1     3
2     5
3   NaN
4     6
5     8
dtype: float64

默认情况下,Series 的下标都是数字(可以使用额外参数指定),类型是统一的。

DataFrame

DataFrame 则是个二维结构,这里首先构造一组时间序列,作为我们第一维的下标:

In [3]: 

dates = pd.date_range('20130101', periods=6)
 
print 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')

随后我们创建一个DataFrame结构:

In [4]:

df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
 
df

默认情况下,如果不指定 index 参数和 columns,那么他们的值将用从 0 开始的数字替代。

除了向 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' : 'foo' })
 
df2

得到数据:

 

我们要使字典的每个 key 代表一列,其 value 可以是各种能够转化为 Series 的对象。

与 Series 要求所有的类型都一致不同,DataFrame 值要求每一列数据的格式相同:

 In [6]:

df2.dtypes

Out[6]:

A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object

查看数据

头尾数据

head 和 tail 方法可以分别查看最前面几行和最后面几行的数据(默认为 5):

In [7]:

df.head()

Out[7]:

ABCD
2013-01-01
——-
-0.605936-0.861658-1.0019241.528584
2013-01-02
——-
-0.1654080.3883381.1871871.819818
2013-01-03
——-
0.065255-1.608074-1.282331-0.286067
2013-01-04
——-
1.2893050.497115-0.2253510.040239
2013-01-05
——-
0.0382320.875057-0.0925260.934432

到这里也就快结束 了,还有三行,所以冲啊!

In [8]:

df.tail(3)

Out[8]:

ABCD
2013-01-04
——-
1.2893050.497115-0.2253510.040239
2013-01-05
——-
0.0382320.875057-0.0925260.934432
2013-01-06
——-
-2.163453-0.0102791.6998861.291653

下标,列标,数据

下标使用 index 属性查看:

In [9]:

df.index

Out[9]:

DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
               '2013-01-05', '2013-01-06'],
              dtype='datetime64[ns]', freq='D')

列标使用 columns 属性查看: 

In [10]:

df.columns

Out[10]:

Index([u'A', u'B', u'C', u'D'], dtype='object')

数据值使用 values 查看:

In [11]:

df.values

 Out[11]:

array([[-0.60593585, -0.86165752, -1.00192387,  1.52858443],
       [-0.16540784,  0.38833783,  1.18718697,  1.81981793],
       [ 0.06525454, -1.60807414, -1.2823306 , -0.28606716],
       [ 1.28930486,  0.49711531, -0.22535143,  0.04023897],
       [ 0.03823179,  0.87505664, -0.0925258 ,  0.93443212],
       [-2.16345271, -0.01027865,  1.69988608,  1.29165337]])

统计数据

查看简单的统计数据:

In [12]:

df.describe()

Out[12]:

ABCD
count
——-
6.0000006.0000006.0000006.000000
mean
——-
-0.257001-0.1199170.0474900.888110
std
——-
1.1266570.9387051.1826290.841529
min
——-
-2.163453-1.608074-1.282331-0.286067
25%
——-
-0.495804-0.648813-0.8077810.263787
50%
——-
-0.0635880.189030-0.1589391.113043
75%
——-
0.0584990.4699210.8672591.469352
max
——-
1.2893050.8750571.6998861.819818

转置

In [13]:

df.T

Out[13]:

2013-01-01 00:00:002013-01-02 00:00:002013-01-03 00:00:002013-01-04 00:00:002013-01-05 00:00:002013-01-06 00:00:00
A
——-
-0.605936-0.1654080.0652551.2893050.038232-2.163453
B
——-
-0.8616580.388338-1.6080740.4971150.875057-0.010279
C
——-
-1.0019241.187187-1.282331-0.225351-0.0925261.699886
D
——-
1.5285841.819818-0.2860670.0402390.9344321.291653

排序

sort_index(axis=0, ascending=True) 方法按照下标大小进行排序,axis=0 表示按第 0 维进行排序。

In [14]: 

df.sort_index(ascending=False)

Out[14]:

ABCD
2013-01-06
——-
-2.163453-0.0102791.6998861.291653
2013-01-05
——-
0.0382320.875057-0.0925260.934432
2013-01-04
——-
1.2893050.497115-0.2253510.040239
2013-01-03
——-
0.065255-1.608074-1.282331-0.286067
2013-01-02
——-
-0.1654080.3883381.1871871.819818
2013-01-01
——-
-0.605936-0.861658-1.0019241.528584

In [15]:

df.sort_index(axis=1, ascending=False)

Out[16]:

ABCD
2013-01-03
——-
0.065255-1.608074-1.282331-0.286067
2013-01-01
——-
-0.605936-0.861658-1.0019241.528584
2013-01-06
——-
-2.163453-0.0102791.6998861.291653
2013-01-02
——-
-0.1654080.3883381.1871871.819818
2013-01-04
——-
1.2893050.497115-0.2253510.040239
2013-01-05
——-
0.0382320.875057-0.0925260.934432

索引

虽然 DataFrame 支持 Python/Numpy 的索引语法,但是推荐使用 .at, .iat, .loc, .iloc.ix 方法进行索引。

读取数据

选择单列数据:

In [17]:

df["A"]

 Out[17]:

2013-01-01   -0.605936
2013-01-02   -0.165408
2013-01-03    0.065255
2013-01-04    1.289305
2013-01-05    0.038232
2013-01-06   -2.163453
Freq: D, Name: A, dtype: float64

也可以用 df.A

In [18]:

df.A
2013-01-01   -0.605936
2013-01-02   -0.165408
2013-01-03    0.065255
2013-01-04    1.289305
2013-01-05    0.038232
2013-01-06   -2.163453
Freq: D, Name: A, dtype: float64

然后我们使用切片读取多行:

Out[19]:

ABCD
2013-01-01
——-
-0.605936-0.861658-1.0019241.528584
2013-01-02
——-
-0.1654080.3883381.1871871.819818
2013-01-03
——-
0.065255-1.608074-1.282331-0.286067

index 名字也可以进行切片:

In [20]:

 
  1. df["20130101":"20130103"]

Out[20]:

ABCD
2013-01-01
——-
-0.605936-0.861658-1.0019241.528584
2013-01-02
——-
-0.1654080.3883381.1871871.819818
2013-01-03
——-
0.065255-1.608074-1.282331-0.286067
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值