呆鸟云:“在学习 Python 数据分析的过程中,呆鸟发现直接看官档就是牛逼啊,内容全面、丰富、详细,而 Python 数据分析里最核心的莫过于 pandas,于是就想翻译 pandas 官档,于是就发现了 pypandas.cn 这个项目,于是就加入了 pandas 中文官档翻译小组,于是就没时间更新公众号,于是就犯懒想把翻译与校译的 pandas 当公众号文章发上来,于是今后大家就可以在这里看了。”
本节介绍 pandas 数据结构的基础用法。下列代码创建示例数据对象:
In [1]: index = pd.date_range('1/1/2000', periods=8)
In [2]: s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
In [3]: df = pd.DataFrame(np.random.randn(8, 3), index=index,
...: columns=['A', 'B', 'C'])
...:
Head 与 Tail
head()
与 tail()
用于快速预览 Series 与 DataFrame,默认显示 5 条数据,也可以指定要显示的数量。
In [4]: long_series = pd.Series(np.random.randn(1000))
In [5]: long_series.head()
Out[5]:
0 -1.157892
1 -1.344312
2 0.844885
3 1.075770
4 -0.109050
dtype: float64
In [6]: long_series.tail(3)
Out[6]:
997 -0.289388
998 -1.020544
999 0.589993
dtype: float64
属性与底层数据
Pandas 可以通过多个属性访问元数据:
- shape:
- 输出对象的轴维度,与 ndarray 一致
- 轴标签
- Series: Index (仅有此轴)
- DataFrame: Index (行) 与列
注意: 为属性赋值是安全的!
In [7]: df[:2]
Out[7]:
A B C
2000-01-01 -0.173215 0.119209 -1.044236
2000-01-02 -0.861849 -2.104569 -0.494929
In [8]: df.columns = [x.lower() for x in df.columns]
In [9]: df
Out[9]:
a b c
2000-01-01 -0.173215 0.119209 -1.044236
2000-01-02 -0.861849 -2.104569 -0.494929
2000-01-03 1.071804 0.721555 -0.706771
2000-01-04 -1.039575 0.271860 -0.424972
2000-01-05 0.567020 0.276232 -1.087401
2000-01-06 -0.673690 0.113648 -1.478427
2000-01-07 0.524988 0.404705 0.577046
2000-01-08 -1.715002 -1.039268 -0.370647
Pandas 对象(Index
, Series
, DataFrame
)相当于数组的容器,用于存储数据,并执行计算。大部分类型的底层数组都是 numpy.ndarray
。不过,pandas 与第三方支持库一般都会扩展 Numpy 类型系统,添加自定义数组(见数据类型)。
获取 Index
或 Series
里的数据,请用 .array
属性。
In [10]: s.array
Out[10]:
[ 0.4691122999071863, -0.2828633443286633, -1.5090585031735124,-1.1356323710171934, 1.2121120250208506]
Length: 5, dtype: float64
In [11]: s.index.array
Out[11]:
['a', 'b', 'c', 'd', 'e']
Length: 5, dtype: object
array
一般指 ExtensionArray
。至于什么是 ExtensionArray
及 pandas 为什么要用 ExtensionArray
不是本节要说明的内容。更多信息请参阅数据类型。
提取 Numpy 数组,用 to_numpy()
或 numpy.asarray()
。
In [12]: s.to_numpy()
Out[12]: array([ 0.4691, -0.2829, -1.5091, -1.1356, 1.2121])
In [13]: np.asarray(s)
Out[13]: array([ 0.4691, -0.2829, -1.5091, -1.1356, 1.2121])
Series
与 Index
的类型是 ExtensionArray
时, to_numpy()
会复制数据,并强制转换值。详情见数据类型。
to_numpy()
可以控制 numpy.ndarray
生成的数据类型。以带时区的 datetime 为例,Numpy 未提供时区信息的 datetime 数据类型,pandas 则提供了两种表现形式:
一种是带
Timestamp
的numpy.ndarray
,提供了正确的tz
信息。另一种是
datetime64[ns]
,这也是numpy.ndarray
,值被转换为 UTC,但去掉了时区信息。
时区信息可以用 dtype