2.1.4.3.DataFrames
2.1.4.3.DataFrames
使用library
import numpy as np
import pandas as pd
from numpy.random import randn
初始化亂數
np.random.seed(101)
DataFrame可以接受三個參數:
第一個參數為數值的數列, 型別可以是python數列
第二個參數為label的數列, 型別可以是python數列
第三個參數為label的數列, 型別可以是python數列
df = pd.DataFrame(randn(5,4),['A', 'B', 'C', 'D', 'E'],['W', 'X', 'Y', 'Z'])
也可以直接傳入dictionary
d = {'A':[1,2,np.nan], 'B':[5,np.nan,np.nan], 'C': [1,2,3]}
df.pd.DataFrame(d)
選取DataFrame的Series或subset
選取Column的Series
DataFrame中的任一個column就是Series
df['W'] In: type(df['W']) Out: pandas.core.series.Series
也可以選取多個column
df[['W', 'Y']]
選取Row的Series
指定label
df.loc['A']
指定index
df.iloc['2']
選取特定(Row, Column)位置的subset
取出單一值
df.loc['B', 'Y']
取出特定範圍的subset
df.loc[['A', 'B'], ['X', 'Y']]
取出前五個值
df.head(5)
條件選擇
過濾DataFrame
留下 > 0的值, 將會得到boolean的DataFrame
df > 0
過濾Column
留下 > 0的row, 將會得到boolean的Series
df['W'] > 0
條件選擇
去掉DataFrame所有column 'W'中小於0的row, 將會得到DataFrame
df[df['W'] > 0]
多重條件選擇
df[(df['W']>0) | (df['Y']>1)]
df[(df['W']>0) & (df['Y']>1)]
新增/ 刪除DataFrame的column
'new'將會被新增到df中
newind = 'CA NY WY OR CO'.split()
df['new'] = newind
刪除欄位
由於DataFrame有兩軸座標, 刪除時需指定label是在哪一軸上的
inplace參數預設值為Flase, 僅會返回刪除column後的一組DataFrame, 原來的DataFrame並不會改變; 如果設為True則原來的DataFrame會被覆蓋掉
df.drop('new', axis = 1, inplace = True)
操作索引值
Reset索引值
df.reset_index()
將某一個column設為索引值
newind = 'CA NY WY OR CO'.split()
df['new'] = newind
df.set_index('new')
Multi-Index
建立Multi-Index的DataFrame
# Index Levels
outside = ['G1','G1','G1','G2','G2','G2']
inside = [1,2,3,1,2,3]
hier_index = list(zip(outside,inside))
hier_index = pd.MultiIndex.from_tuples(hier_index)
df = pd.DataFrame(np.random.randn(6,2),index=hier_index,columns=['A','B'])
選取資料
df.loc['G1'].loc[1]
為Multi-Index的名稱賦值
df.index.name = ['G', 'Numbers']
Cross section
可以同時選取不同row的資料
df.xs(['G1',1])
DataFrame的一些基本操作
取出Series的唯一值 (將會回傳array)
df['col2'].unique()
取得Series的長度
len(df['col2'].unique())
df['col2'].nunique()
統計Dataframe中各Series的數量
df['col2'].value_counts()
取得Dataframe的column
df.column
排序Dataframe
df.sort_values('col2')
檢查Dataframe裡的值是不是null
df.isnull()
將function綁定到Dataframe上
def times2(x):
return x*2
df['col1'].apply(times2)
或是
df['col1'].apply(lambda x: x*2)
Pivot table
指定A, B為索引值時, 取D的值作為value, 並將C設定為列層次階段
data = {'A':['foo','foo','foo','bar','bar','bar'],
'B':['one','one','two','two','one','one'],
'C':['x','y','x','y','x','y'],
'D':[1,3,2,5,4,1]}
df = pd.DataFrame(data)
OUT:
A B C D
0 foo one x 1
1 foo one y 3
2 foo two x 2
3 bar two y 5
4 bar one x 4
5 bar one y 1
df.pivot_table(values='D',index=['A', 'B'],columns=['C'])
OUT:
C x y
A B
bar one 4.0 1.0
two NaN 5.0
foo one 1.0 3.0
two 2.0 NaN
Last updated
Was this helpful?