引言

先介绍下 Pandas 的数据结构,毕竟数据结构是万物的基础。

Pandas 有两种主要的数据结构: Series 和 DataFrame 

模块导入

首先我们在代码中引入 Pandas 和 Numpy ,如下:

import numpy as np
import pandas as pd

Series

Series 可以简单的理解为一维数组,可以存储整数、浮点数、字符串、Python 对象等类型的数据。

这个概念有点像 Java 中的集合。

如果无法理解的话,那么可以看下面这个图(Excel 简单画画,灵魂画手登场):

数据可视化基础专题(五):Pandas基础(四) 生成对象_数据

这里的 data 可以是上面提到的那些数据类型,并不仅限于图中的整数。

如果 index 的值未指定,那么将会自动的创建数值类型的索引,从 0 开始,例如:0 , 1 , 2, 3 ... len(data) - 1 。

创建一个 Series ,这里我们可以使用 pd.Series 函数来创建,如下:

s = pd.Series(np.random.rand(5), index=['a', 'b', 'c', 'd', 'e'])
print(s)
print(s.index)

s1 = pd.Series(np.random.randn(5))
print(s1)

DataFrame

DataFrame 是由多种类型的列构成的二维标签数据结构。

简单理解是类似于 Excel 、 SQL 表的结构。

DataFrame 是最常用的 Pandas 对象,与 Series 一样,DataFrame 支持多种类型的输入数据:

  • 一维 ndarray、列表、字典、Series 字典
  • 二维 numpy.ndarray
  • 结构多维数组或记录多维数组
  • Series
  • DataFrame

用含日期时间索引与标签的 NumPy 数组生成 DataFrame

In [5]: dates = pd.date_range('20130101', periods=6)

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

In [7]: df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))

In [8]: df
Out[8]: 
                   A         B         C         D
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-05 -0.424972  0.567020  0.276232 -1.087401
2013-01-06 -0.673690  0.113648 -1.478427  0.524988

用 Series 字典对象生成 DataFrame:

In [9]: 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'})
   ...: 

In [10]: df2
Out[10]: 
     A          B    C  D      E    F
0  1.0 2013-01-02  1.0  3   test  foo
1  1.0 2013-01-02  1.0  3  train  foo
2  1.0 2013-01-02  1.0  3   test  foo
3  1.0 2013-01-02  1.0  3  train  foo

DataFrame 的列有不同数据类型

In [11]: df2.dtypes
Out[11]: 
A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object