快速使用
bogon:Documents rousseau$ ipython --pylab
Python 3.6.0 (v3.6.0:41df79263a11, Dec 22 2016, 17:23:13)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
Using matplotlib backend: MacOSX
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: import matplotlib as plt
In [4]: from pandas import Series, DataFrame
按照Shell中的語句,就可以進入到Ipython的環境中使用Pandas分析數據,並繪制圖表。ipython 環境的具體安裝配置在Mac很簡單,通過pip安裝一下就可以,其他操作系統的安裝可以自己百度一下。如果沒有 ipython 也不要緊,標准的 python 命令行環境下也可以使用。
如果你使用 ipython,通過TAB補齊和help功能能給你的工作帶來很大的便利。
主要數據結構 Series 和 DataFrame 及創建
Pandas里兩個主要的數據結構就是 Series 和 DataFrame。Series 類似於Python的字典,DataFrame可以理解為二維表。
Series
可以通過傳入一個List來創建一個Series對象。
In [6]: s = pd.Series([1,2,4,5,6,np.nan,7,8])
In [7]: s
Out[7]:
0 1.0
1 2.0
2 4.0
3 5.0
4 6.0
5 NaN
6 7.0
7 8.0
dtype: float64
DataFrame
DataFrame 的創建有很多種方式,可以使用 numpy array 或者 Python的字典(包括嵌套字典)。
In [103]: dt = DataFrame({"name":['wang','lv','bao','song'],"sex":['male','female','male','female'],"age":[12,23,35,47]})
In [104]: dt
Out[104]:
age name sex
0 12 wang male
1 23 lv female
2 35 bao male
3 47 song female
查看、選擇數據
Series、DataFrame 查看數據的方式可以非常靈活,利用索引、切片,以及一些內置函數。
查看索引,列
接上面的例子
In [118]: dt.index
Out[118]: RangeIndex(start=0, stop=4, step=1)
In [119]: dt.columns
Out[119]: Index(['age', 'name', 'sex'], dtype='object')
通過 dt.values
還可以查看底層的數據。
選擇查看部分數據
Series和DataFrame可以快速的從整個結果集中選擇你需要的數據,包括選擇一列或幾列、一行或幾行,以及通過對值進行篩選選擇對應結果集。推薦使用.at、.iat、.loc、.iloc、.ix
進行選擇。
1、獲取某一列
In [140]: dt['name']
Out[140]:
序號
0 wang
1 lv
2 bao
3 song
Name: name, dtype: object
2、獲取行,對行進行切片
In [143]: dt[1:3]
Out[143]:
age name sex
序號
1 23 lv female
2 35 bao male
3、通過loc選擇一行或多行
In [162]: dt.loc[1]
Out[162]:
age 23
name lv
sex female
Name: 1, dtype: object
In [163]: dt.loc[1:3]
Out[163]:
age name sex
序號
1 23 lv female
2 35 bao male
3 47 song female
4、同時選擇行和列
In [166]: dt.loc[2:3,['name','age']]
Out[166]:
name age
序號
2 bao 35
3 song 47
5、訪問某個位置的值
In [168]: dt.at[1,'name']
Out[168]: 'lv'
以i
開頭的函數,表示通過具體的位置選擇數據,而不是通過標簽(即行名或列名)。
6、通過一個列中的值來選擇數據
In [170]: dt[ dt.age > 30 ]
Out[170]:
age name sex
序號
2 35 bao male
3 47 song female
7、通過where來篩選數據
In [183]: dt[dt > 30]
Out[183]:
age name sex
序號
0 NaN wang male
1 NaN lv female
2 35.0 bao male
3 47.0 song female
數據處理:轉置、排序
對於一個DataFrame,可以進行行列的轉置,就像Excel中粘貼時交換x/y軸一樣。
In [176]: df = DataFrame({"beijing":{"people":3000,"area":5000,"university":200},"guangzhou":{"people":2000,"area":3000,"university":150},"shanghai":{"peo
...: ple":2800,"area":2500,"university":190}})
In [177]: df
Out[177]:
beijing guangzhou shanghai
area 5000 3000 2500
people 3000 2000 2800
university 200 150 190
In [178]: df.T
Out[178]:
area people university
beijing 5000 3000 200
guangzhou 3000 2000 150
shanghai 2500 2800 190
從這個例子可以看出來,構建 DataFrame 對象時,可以采用層次化的 dict 。
排序操作,可以按照列或者行進行排序,非常靈活。
In [194]: df.sort_values(by='beijing')
Out[194]:
beijing guangzhou shanghai
university 200 150 190
people 3000 2000 2800
area 5000 3000 2500
In [195]: df.sort_values(by='beijing',ascending=False)
Out[195]:
beijing guangzhou shanghai
area 5000 3000 2500
people 3000 2000 2800
university 200 150 190
In [196]: df.sort_values(axis=1,by='people',ascending=False)
Out[196]:
beijing shanghai guangzhou
area 5000 2500 3000
people 3000 2800 2000
university 200 190 150
統計操作
describe
可以對數據集進行快速的統計分析。
In [198]: df.T.describe()
Out[198]:
area people university
count 3.000000 3.000000 3.000000
mean 3500.000000 2600.000000 180.000000
std 1322.875656 529.150262 26.457513
min 2500.000000 2000.000000 150.000000
25% 2750.000000 2400.000000 170.000000
50% 3000.000000 2800.000000 190.000000
75% 4000.000000 2900.000000 195.000000
max 5000.000000 3000.000000 200.000000
參考資料:
1、pandas
2、十分鍾搞定Pandas
3、利用Python進行數據分析