第一章 Python 数据分析之pandas的使用 第一节: pandas --基础操作(一): Serise 、DataFrame 创建和数据选择 基础操作 第二节: pandas – 基础操作(二): DataFrame 的增删改查、排序操作等基础操作 第三节: pandas – 基础操作(三):pandas 层次化索引创建、数据选择 第二章 Python 数据分析之 时间戳操作 第二章 python 数据分析之numpy的使用 第三章 python 数据可视化之matplotlib的使用
在数据分析中pandas 有着举足轻重的地位,提供了高性能、易使用的数据结构与数据分析工具。
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
导入pandas和numpy两个包,导入方式如下:
import numpy as np import pandas as pdpandas有2个数据对象分别为Series和DataFrame,Serise为单列数据,DataFrame是为多列Serise的集合。
Serise是带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据。轴标签统称为索引。调用 pd.Series 函数即可创建 Series。
格式: pd.Series(data,index=index)上述代码中,data 支持以下数据类型: - Python 字典 - 多维数组 - 标量值(如,5) index 是轴标签列表,不同标签可以分为如下几种情况:
没有指定index参数data用值列表生成 Series 时,Pandas 默认自动生成整数索引,代码如下:
In [3]: s = pd.Series([1, 3, 5, np.nan, 6, 8]) In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64 多维数组data为多维数组,data的长度和index的长度相同
s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e']) # np.random.randn(5) # Out[34]: array([-0.87399137, -0.60509713, -1.07188732, 0.93279748, 0.23194527]) s Out[35]: a -0.784034 b 0.302415 c -0.907291 d 0.207490 e -0.652792 dtype: float64 字典 se = pd.Series({'a':1,'b':2,'c':4}) se Out[42]: a 1 b 2 c 4 dtype: int64注意: data 为字典,且未设置 index 参数时,如果 Python 版本 >= 3.6 且 Pandas 版本 >= 0.23,Series 按字典的插入顺序排序索引。之前的版本按照,series按照字母顺序排序
标量值 se = pd.Series(5.0 ,index=[1,2,3,4,5]) se Out[44]: 1 5.0 2 5.0 3 5.0 4 5.0 5 5.0 dtype: float64DataFrame 是由多种类型的列构成的二维标签数据结构,类似于 Excel 、SQL 表,或 Series 对象构成的字典。DataFrame 是最常用的 Pandas 对象,与 Series 一样,DataFrame 支持多种类型的输入数据:
一维 ndarray、列表、字典、Series 字典二维 numpy.ndarray结构多维数组或记录多维数组SeriesDataFrame 用 Series 字典或字典生成 DataFrame 生成的index是每个series的并集,如果没有指定列,dataFrame的列就是字典键的有序列表 d = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']), ...: 'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])} df = pd.DataFrame(d) # 无参数结果为sereis的并集 df Out[52]: one two a 1.0 1.0 b 2.0 2.0 c 3.0 3.0 d NaN 4.0 df = pd.DataFrame(d,index=['a','b','c']) # 指定index df Out[54]: one two a 1.0 1.0 b 2.0 2.0 c 3.0 3.0 df = pd.DataFrame(d,index=['a','c'],columns=['two','aa']) # 指定index columns df Out[56]: two aa a 1.0 NaN c 3.0 NaN 用列表字典生成 DataFrame,index 必须和字典长度比配,否则报错。 data = [{'a':1, 'b':2,'c':4},{'a':4,'b':55,'d':6}] df = pd.DataFrame(data) # 并集 df Out[59]: a b c d 0 1 2 4.0 NaN 1 4 55 NaN 6.0 df = pd.DataFrame(data,index=['one','two']) df Out[61]: a b c d one 1 2 4.0 NaN two 4 55 NaN 6.0 df = pd.DataFrame(data,index=['one','two'],columns=['a','b']) df Out[63]: a b one 1 2 two 4 55 用多维数组字典、列表字典生成 DataFrame d = {'one': [1., 2., 3., 4.], 'two': [4., 3., 2., 1.]} In [45]: pd.DataFrame(d) Out[45]: one two 0 1.0 4.0 1 2.0 3.0 2 3.0 2.0 3 4.0 1.0 In [46]: pd.DataFrame(d, index=['a', 'b', 'c', 'd']) Out[46]: one two a 1.0 4.0 b 2.0 3.0 c 3.0 2.0 d 4.0 1.0 用结构多维数组或记录多维数组生成 DataFrame data = np.zeros((2, ), dtype=[('A', 'i4'), ('B', 'f4'), ('C', 'a10')]) data Out[46]: array([(0, 0., b''), (0, 0., b'')], dtype=[('A', '<i4'), ('B', '<f4'), ('C', 'S10')]) data[:] = [(1, 2., 'Hello'), (2, 3., "World")] data Out[48]: array([(1, 2., b'Hello'), (2, 3., b'World')], dtype=[('A', '<i4'), ('B', '<f4'), ('C', 'S10')]) pd.DataFrame(data) Out[49]: A B C 0 1 2.0 b'Hello' 1 2 3.0 b'World' 用元组字典生成 DataFrame 可以自动创建多层索引 DataFrame pd.DataFrame({('a', 'b'): {('A', 'B'): 1, ('A', 'C'): 2}, ...: ('a', 'a'): {('A', 'C'): 3, ('A', 'B'): 4}, ...: ('a', 'c'): {('A', 'B'): 5, ('A', 'C'): 6}, ...: ('b', 'a'): {('A', 'C'): 7, ('A', 'B'): 8}, ...: ('b', 'b'): {('A', 'D'): 9, ('A', 'B'): 10}}) Out[71]: a b b a c a b A B 1.0 4.0 5.0 8.0 10.0 C 2.0 3.0 6.0 7.0 NaN D NaN NaN NaN NaN 9.0pandas 推荐优化过的数据访问方式 : .at , .iat,.loc,.iloc
# 以下操作的数据 dates = pd.date_range('20130101', periods=6) # 时间戳 df = pd.DataFrame(np.random.randn(6,4),index=datas,columns=list('abcd')) df Out[99]: a b c d 2013-01-01 -1.161403 -1.339640 0.566161 -1.680998 2013-01-02 -2.164866 -1.020372 -1.196390 -0.417629 2013-01-03 -0.177736 -0.197125 0.047798 -0.398154 2013-01-04 -1.221294 0.577236 0.208095 1.333940 2013-01-05 -0.018441 0.983021 0.832646 1.516306 2013-01-06 -0.737595 -0.381288 0.677688 -0.890492选取单列: df.a df[‘a’]
选取多列: df[[‘a’,‘b’]]
切片:[]
df[0:3] df['20130102':'20130104'] df[0:3] # 按行号提取数据 Out[100]: a b c d 2013-01-01 -1.161403 -1.339640 0.566161 -1.680998 2013-01-02 -2.164866 -1.020372 -1.196390 -0.417629 2013-01-03 -0.177736 -0.197125 0.047798 -0.398154 df['20130102':'20130104'] Out[104]: a b c d 2013-01-02 -2.164866 -1.020372 -1.196390 -0.417629 2013-01-03 -0.177736 -0.197125 0.047798 -0.398154 2013-01-04 -1.221294 0.577236 0.208095 1.333940