作者介绍 @王多鱼 百度的一名推荐算法攻城狮。 主要负责推荐的召回和排序模型的优化工作。 1 前言 Pandas 是Python的一个数据分析包,它是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。 2 数据结构 数据结构: 系列(Series) 数据框(DataFrame) 面板(Panel) (多个series → 多个数据框 → 面板)。这些数据结构构建在Numpy数组之上,这意味着它们很快。 导入包 1 >>> import pandas as pd2 >>> import numpy as np 系列
数据框 数据框的数据存储格式如下: 1 # 以列表定义 2 >>> data = [['Alex',10], ['Bob',12], ['Clarke',13]] 3 >>> df = pd.DataFrame(data, columns=['Name', 'Age']) 4 >>> df 5 Name Age 6 0 Alex 10 7 1 Bob 12 8 2 Clarke 13 910 # 以字典定义11 >>> data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'], 'Age':[28,34,29,42]}12 >>> df = pd.DataFrame(data)13 >>> df 14 Age Name15 0 28 Tom16 1 34 Jack17 2 29 Steve18 3 42 Ricky 数据索引: ●底层是由索引和值构成的多元组,(index1, [index2,index3,] value)。再由这些多元组组合出可视化的数据框。 ●缺失值:数据框某个位置的所以没有对应的多元组,则会显示缺省值。
3 数据输入/输出 方法一、直接定义 ●pd.Series ●pd.DataFrame 方法二、读取器函数 读入: ●read_csv/read_table ●read_sql ●read_html ●read_json 读出: ●to_csv 4 基本功能 数据结构的属性 1 >>> df 2 Age Name 3 0 28 Tom 4 1 34 Jack 5 2 29 Steve 6 3 42 Ricky 7 8 >>> df.axes 9 [RangeIndex(start=0, stop=4, step=1), Index([u'Age', u'Name'], dtype='object')] 1011 >>> df.dtypes12 Age int6413 Name object14 dtype: object 15 16 >>> df.size17 8 18 19 >>> df.values20 array([[28, 'Tom'],21 [34, 'Jack'], 22 [29, 'Steve'], 23 [42, 'Ricky']], dtype=object) 简单统计
5 选择数据 定位函数(多轴索引) ●loc():基于标签索引 ●iloc():基于整数索引 定位函数格式 df.loc[ 行索引, 列索引] 行索引选择数据图示: 列索引选择图示: ●指定索引 1 >>> df = pd.DataFrame(np.random.randn(8, 4), 2 index = ['a','b','c','d','e','f','g','h'], 3 4 columns = ['A', 'B', 'C', 'D']) 5 >>> df 6 A B C D 7 a -0.484976 1.958562 -0.073555 0.524286 8 b 1.681393 1.041901 -0.109796 0.836486 9 c 0.352229 0.656365 0.590963 0.90898110 d 1.325258 1.199558 0.953455 -0.19250711 e 0.573300 -0.202530 -0.699603 1.504382 12 f -1.423372 -0.311816 0.680950 -1.61934313 g 0.771233 -0.101350 -0.207373 1.24212714 h 0.084874 -0.655007 -0.834754 0.072229 151617 >>> df.loc['a', ['A', 'B']]18 A -0.48497619 B 1.958562
●区间索引 1 >>>>> df.loc[:, 'A'] 2 a -0.484976 3 b 1.681393 4 c 0.352229 5 d 1.325258 6 e 0.573300 7 f -1.423372 8 g 0.771233 9 h 0.08487410 Name: A, dtype: float64111213 >>> df.loc['a':'e','A':'C']14 A B C15 a -0.484976 1.958562 -0.07355516 b 1.681393 1.041901 -0.10979617 c 0.352229 0.656365 0.59096318 d 1.325258 1.199558 0.95345519 e 0.573300 -0.202530 -0.699603 ●布尔值索引
6 操作数据 排序 ●sort_index():按索引排序 ●sort_values():按值排序 1 >>> unsorted_df =pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]}) 2 >>> unsorted_df 3 col1 col2 4 0 2 1 5 1 1 3 6 2 1 2 7 3 1 4 8 910 # 按某列排序11 >>> unsorted_df.sort_values('col1')12 col1 col213 1 1 314 2 1 215 3 1 416 0 2 117 1819 # 按多列排序20 >>> unsorted_df.sort_values(['col1','col2'])21 col1 col222 2 1 223 1 1 324 3 1 425 0 2 1 聚合 ●分组聚合:groupby + agg groupby函数的图示,用于聚合相同key的数据。
●窗口聚合:rolling + agg 做定量模型比较常用。 应用函数 ●pipe():表格应用函数,应用于整个表格,方便链式编程 >>> def adder(x,y): return x+y >>> df = pd.DataFrame(np.random.randn(5,3), columns=['col1','col2','col3'])>>> df col1 col2 col30 1.200842 -0.387094 0.2189031 -2.469144 2.283831 0.3424512 0.688127 0.445456 0.9666263 0.912838 0.577441 -0.9674564 -0.706913 0.791318 -1.040644 >>> df.pipe(adder, 2) col1 col2 col30 3.200842 1.612906 2.2189031 -0.469144 4.283831 2.3424512 2.688127 2.445456 2.9666263 2.912838 2.577441 1.0325444 1.293087 2.791318 0.959356 ●apply():行列应用函数
●applymap():元素映射函数,类似于map() >>> aes_encrypt = crypto_util.AesEncrypt()>>> def decrypt(line): decrypt_str = aes_encrypt.decrypt(line, crypto_util.constants.Constants.CRM_ENCRYPT_PREFIX) return decrypt_str>>> df = pd.DataFrame( ['baiducrmcommonciper_LUjEqeTBXHcHFak5E3lwcgOR+Xfl6v/hkbSrzqBBFI4=', 'baiducrmcommonciper_4TReevfj06k3mg8871PvslHvPuPwlCUkn4xM6ZjrAn4=', 'baiducrmcommonciper_zmrudGYBOalk5LTqlF5ncg=='])>>> df.applymap(decrypt) 00 25339384668@qq.com1 1909062174@qq.com2 8076719440@qq.om 7 操作数据框 连结 ●append ●concat concat 函数功能如下图所示,(1)不指定axis时,默认axis=0,上下拼接;(2)指定axis=1时,左右拼接。
Merge pd.merge(left,right,how='inner',on=None, left_on=None, right_on=None,left_index=False,right_index=False,sort=True) merge函数图示: 8 画图 %matplotlib inlineimport numpy as npimport pandas as pdimport matplotlib.pyplot as plt plt.rc('figure', figsize=(5, 3))ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000)) ts = ts.cumsum()ts.plot()
大家尽情的用Pandas玩耍数据吧 ~ |
|