引言
先介绍下 Pandas 的数据结构,毕竟数据结构是万物的基础。
Pandas 有两种主要的数据结构: Series 和 DataFrame
模块导入
首先我们在代码中引入 Pandas 和 Numpy ,如下:
import numpy as np import pandas as pd
Series
Series 可以简单的理解为一维数组,可以存储整数、浮点数、字符串、Python 对象等类型的数据。
这个概念有点像 Java 中的集合。
如果无法理解的话,那么可以看下面这个图(Excel 简单画画,灵魂画手登场):
这里的 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