pandas入門指南

上一篇講了numpy,除此以外,還有一個工具咱們必定會使用,那就是pandas。若是說numpy中數據存儲形式是列表的話,那麼pandas中數據的存儲形式更像是字典。爲何這麼說呢?由於pandas中的數據每一行每一列都有名字,而numpy中沒有。本文主要介紹pandas的基本使用方法,更多高級用法你們能夠參考 pandas官方文檔app

1、pandas的安裝及導入

安裝:命令行中輸入如下代碼dom

pip3 install pandas

導入:爲了簡便,這裏使用pd做爲pandas的縮寫(由於pandas依賴numpy,因此在使用以前須要安裝和導入numpy)工具

import numpy as np
import pandas as pd

2、新建pandas列表、矩陣及其屬性

建立方法:
pd.Series:建立pandas列表
pd.date_range:建立pandas日期列表
pd.DataFrame:建立pandas矩陣
矩陣屬性
dtypes:數據類型
index:行名
columns:列名
values:數據值
describe():實值數據列的統計數據
T:矩陣的倒置
sort_index(axis=, ascending=):矩陣排序{axis:0(行排序),1(列排序)}{ascending:True(升序),False(降序)}
sort_values(by=, ascending=):按某一列的值排序{by:列名}命令行

s = pd.Series([1, 3, 6, np.nan, 23, 3])
dates = pd.date_range('20180708', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=['a', 'b', 'c', 'd'])
df2 = pd.DataFrame({
  'a':pd.Series([1, 2, 3, 4]),
  'b':pd.Timestamp('20180708'),
  'c':pd.Categorical(['cate1', 'cate2', 'cate3', 'cate4'])
})
print(df2)
print(df2.dtypes)
print(df2.index)
print(df2.columns)
print(df2.values)
print(df2.describe())
print(df2.T)
print(df2.sort_index(axis=1, ascending=False))
print(df2.sort_index(axis=0, ascending=False))
print(df2.sort_values(by='a', ascending=False))

3、pandas選擇數據

.列名:選擇某一列
[列名]:選擇某一列
[start : end]:選擇行索引以start開頭,end - 1結尾的數據
[行名start:行名end]:選擇行名以start開頭,end結尾的數據
loc[行名選擇, 列名選擇]:根據行名和列名選擇數據
iloc[行索引選擇, 列索引選擇]:根據行索引和列索引選擇數據
ix[行 名/索引 選擇,列 名/索引 選擇]:混合 名/索引 選擇數據
[布爾表達式]:根據布爾表達式結果選擇數據,只有當布爾表達式爲真時的數據纔會被選擇excel

dates = pd.date_range('20180709', periods=3)
df = pd.DataFrame(np.arange(12).reshape((3, 4)), index=dates, columns=['A', 'B', 'C', 'D'])
print(df.A)
print(df['A'])
print(df[2:3])
print(df['20180709':'20180710'])

# loc: select by label
print(df.loc['20180711'])
print(df.loc[:,['B','C']])

# iloc : select by position
print(df.iloc[1:3, 2:4])
print(df.iloc[[0, 2], 2:4])

# ix : mixed selection
print(df.ix[[0, 2], ['B']])

# Boolean indexing
print(df[df.A > 3])

4、pandas設置數據值

首先選擇數據,而後直接經過賦值表達式,便可將選擇的數據設置爲相應的值code

dates = pd.date_range('20180709', periods=3)
df = pd.DataFrame(np.arange(12).reshape((3, 4)), index=dates, columns=['A', 'B', 'C', 'D'])
df.loc['20180709', 'B'] = 666
df.iloc[2, 2] = 999
df.ix['20180709', 3] = 777
df.A[df.A > 3] = 888
df['F'] = np.nan
print(df)

5、pandas處理NaN值

dropna(axis=, how=):丟棄NaN數據,{axis:0(按行丟棄),1(按列丟棄)} {how:'any'(只要含有NaN數據就丟棄),'all'(全部數據都爲NaN時丟棄)}
fillna(value=):將NaN值都設置爲value的值
isnull():對每各元素進行判斷是不是NaN,返回結果矩陣
np.any(matrix) == value:判斷matrix矩陣中是否有value值
np.all(matrix) == value:判斷matrix矩陣中是否全部元素都是value值排序

dates = pd.date_range('20180709', periods=5)
df = pd.DataFrame(np.arange(20).reshape((5, 4)), index=dates, columns=['A', 'B', 'C', 'D'])
df.iloc[3, 3] = np.nan
print(df.dropna(axis=1, how='all')) # how = {'any', 'all'}
print(df.fillna(value=666))
print(df.isnull())
print(np.any(df.isnull()) == True)
print(np.all(df.isnull()) == True)

6、pandas讀取數據、導出數據

根據數據的格式,pandas提供了多種數據讀取和導出的方法,如:
讀取數據:read_csv、read_table、read_fwf、read_clipboard、read_excel、read_hdf
導出數據:to_csv、to_table、to_fwf、to_clipboard、to_excel、to_hdf索引

df = pd.read_csv('Q1.csv')
print(df)
df.to_csv('Q1_pandas.csv')

7、pandas合併數據

concat方法
第一個參數:須要合併的矩陣
axis:合併維度,0:按行合併,1:按列合併
join:處理非公有 列/行 的方式,inner:去除非公有的 列/行,outer:對非公有的 列/行 進行NaN值填充而後合併
ignore_index:是否重排行索引ip

df1 = pd.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D'], index=[0, 1, 2])
df2 = pd.DataFrame(np.ones((3, 4)), columns=['B', 'C', 'D', 'E'], index=[1, 2, 3])

print(pd.concat([df1, df2], join='outer', ignore_index=True)) # join = {'outer', 'inner'}
print(pd.concat([df1, df2], axis=1, join_axes=[df1.index]))
print(df1.append([df2], ignore_index=True))

merge方法
第一個參數、第二個參數:須要合併的矩陣
on:公有列名
how:處理非公有行的方式,inner:去除非公有行,outer:對非公有的行進行NaN值填充而後合併,left:保留左矩陣的全部行,對非公有的元素進行NaN值填充,right:保留右邊矩陣的全部行,對非公有的元素進行NaN值填充
indicator:是否顯示每一行的merge方式
suffixes:非公有列的列名後綴文檔

df1 = pd.DataFrame({
  'key':['K1', 'K2', 'K3'],
  'A':['A1', 'A2', 'A3'],
  'B':['B1', 'B2', 'B3']
})
df2 = pd.DataFrame({
  'key':['K1', 'K2', 'K3'],
  'C':['C1', 'C2', 'C3'],
  'D':['D1', 'D2', 'D3']
})
print(pd.merge(df1, df2, on='key'))
df3 = pd.DataFrame({
  'key1':['K1', 'K1', 'K0'],
  'key2':['K1', 'K0', 'K1'],
  'col':[1, 2, 3]
})
df4 = pd.DataFrame({
  'key1':['K0', 'K1', 'K0'],
  'key2':['K1', 'K0', 'K0'],
  'col':[6, 7, 8]
})
# how = {'inner', 'outer', 'left', 'right'}
print(pd.merge(df3, df4, on=['key1', 'key2'], how='right', suffixes=['_left', '_right'], indicator=True))

8、pandas數據可視化

pandas數據可視化依賴matplotlib庫,因此在可視化數據以前應該先導入該庫

import matplotlib.pyplot as plt

首先經過np.ramdom方法生成四列隨機數據
而後經過cumsum對隨機數據作累加
再經過scatter方法以其中兩列爲綠色點X, Y的值,另兩列爲藍色點X, Y的值
最後使用plt.show()方法畫圖

data = pd.DataFrame(np.random.randn(1000, 4),
  index=np.arange(1000),
  columns=list("ABCD"))
data = data.cumsum()
# plot methods:
# 'bar', 'hist', 'box', 'kde', 'area', 'scatter', 'hexbin', 'pie'
ax = data.plot.scatter(x='A', y='B', color='blue', label='class 1')
data.plot.scatter(x='C', y='D', color='green', label='class 2', ax=ax)
plt.show()
相關文章
相關標籤/搜索