一、Pandas简介
Pandas是一个专门用于数据分析的开源Python库,在做相关统计分析和决策时,pandas都是一项重要的基础工具。它以NumPy为基础,不仅使Pandas兼容性更强,也更高效。
Pandas 中有两种独特的数据结构:Series和DataFrame,这两种数据结构设计初衷是用于关系型或带标签的数据。用它们管理与SQL关系型数据库和Excel工作表具有类似特征的数据会非常方便。
本文参考书籍:
Python数据分析实战( by Fabio Nelli)
Python数据分析(by Armando Fandango)
利用Python进行数据分析(by Wes McKinney )
本文不涉及过多细节,力求将Pandas包含的主要功能通过思维导图清晰地展现出来,在工作时可以根据思维导图获得Intuition, 再去找相关的代码详情。
二、Get Some Intuition
直观地了解两种数据结构最好的方式就是看下他们长啥样:
1. Series
import pandas as pd
ser = pd.Series([5, 6, 7, 8], index=['a', 'b', 'c', 'd'])
print(ser)
2. DataFrame
import pandas as pd
frame = pd.DataFrame({'color': ['white', 'red', 'green', 'red', 'green'],
'object': ['pen', 'pencil', 'pencil', 'ashtray', 'pen'],
'price1': [5.56, 4.2, 1.3, 0.56, 2.75],
'price2': [4.75, 4.12, 1.6, 0.75, 3.15]})
print(frame)
三、思维导图
四、部分功能的代码演示
1.数据拼接
#np数组的拼接
array1 = np.array([[1,2], [3,4]])
array2 = np.array([[5,6], [7,8]])
array = np.concatenate([array1, array2], axis=1)
# array = np.array([[1,2,5,6], [3,4,7,8]])
# Series对象的拼接,DataFrame与这个类似
ser1 = pd.Series(np.ones(3), index=[1,2,3])
ser2 = pd.Series(np.zeros(3), index=[4,5,6])
ser3 = pd.concat([ser1, ser2], axis=0)
ser4 = pd.concat([ser1, ser2], axis=1)
2.数据映射,相当于Excel的vlookup函数
frame = pd.DataFrame({'color': ['white', 'red', 'yellow'],
'item': ['ball', 'pen', 'pencil']})
price = {'ball': 5, 'pen': 10, 'pencil': 2}
frame['price'] = frame['item'].map(price)
3.数据聚合GroupBy
# 第一步,选择分组依据,可以传入多列
frame = pd.DataFrame({'color': ['white', 'red', 'green', 'red', 'green'],
'object': ['pen', 'pencil', 'pencil', 'ashtray', 'pen'],
'price1': [5.56, 4.2, 1.3, 0.56, 2.75],
'price2': [4.75, 4.12, 1.6, 0.75, 3.15]})
group = frame.groupby(frame['color'])
print(group)
# output:<pandas.core.groupby.groupby.DataFrameGroupBy object at 0x000002414987E080>
#第二步,对分组数据进行聚合
group_mean = group.mean()
print(group_mean)
# output: price1 price2
# color
# green 2.025 2.375
# red 2.380 2.435
# white 5.560 4.750
#第三部,选择所需要的列
result = group_mean['price1']
#一行代码完成三步操作
result = frame['price1'].groupby(frame['color']).mean()
print(result)
# output:
# color
# green 2.025
# red 2.380
# white 5.560
# Name: price1, dtype: float64
4.数据透视表
pd.pivot_table(data, values=None, index=None, columns=None, aggfunc=‘mean’, fill_value=None, margins=False, dropna=True, margins_name=‘All’)
对应Excel的数据透视表,values是值,index是行,columns是列,aggfunc是聚合函数,行和列可以用列表传入多个值。
frame = pd.DataFrame({'color': ['white', 'red', 'green', 'red', 'green'],
'object': ['pen', 'pencil', 'pencil', 'ashtray', 'pen'],
'price1': [5.56, 4.2, 1.3, 0.56, 2.75],
'price2': [4.75, 4.12, 1.6, 0.75, 3.15]})
print(pd.pivot_table(frame, columns='color', aggfunc=np.sum))