pandas 學習彙總13 - 函式應用- 將自定義或其他庫函式應用於Pandas物件( tcy)
阿新 • • 發佈:2018-12-15
Pandas函式應用- 將自定義或其他庫函式應用於Pandas物件(pipe,apply,applymap,map,agg) 2018/12/5
1.函式:
# 表函式應用: df.pipe(func, *args, **kwargs) #資料為Series,DataFrames或GroupBy物件 s.pipe( func, *args, **kwargs) # 行或列函式應用: df.apply(func, axis=0, raw=False, result_type=None, args=(), **kwds) s.apply(func, convert_dtype=True, args=(), **kwds) # 引數: # raw =False輸入為序列;=True輸入為ndarray # result_type: {'expand', 'reduce', 'broadcast', None}在axis=1時起作用 # 分別返回list,Series,原形狀,自動推斷 # 元素函式應用: df.applymap(func) s.map(arg, na_action=None) #對應的序列的對映值(dict、Series或函式) # 聚合: s.agg(func, axis=0, *args, **kwargs)#使用指定軸上的一個或多個操作進行聚合
2.pipe函式
例項1:
def adder(x1,x2): return x1+x2 s=pd.Series([1,2,3,4]) df = pd.DataFrame([[1,2,3],[4,5,6]],columns=['col1','col2','col3']) s.pipe(adder,2) # 0 3 # 1 4 # 2 5 # 3 6 # dtype: int64 df.pipe(adder,2) # col1 col2 col3 # 0 3 4 5 # 1 6 7 8
3.apply函式
# 例項1:Series序列應用 def adder(x,y): return np.add(x,y) s.apply(lambda x:x+2) #lambda函式 s.apply(adder,args=(2,)) #自定義函式 def sum(x, **kwargs): for month in kwargs: x+=kwargs[month] return x s.apply(sum,a1=1,a2=2,a3=3)#多引數 s.apply(np.log) #庫函式 # 0 0.000000 # 1 0.693147 # 2 1.098612 # 3 1.386294 # dtype: float64
例項2:DataFrame應用:
# 用apply()方法沿DataFrame或Panel的軸應用任意函式
df.apply(np.mean)#預設axis=0,在列上計算
# col1 2.5
# col2 3.5
# col3 4.5
# dtype: float64
df.apply(np.mean,axis=1)
# 0 2.0
# 1 5.0
4.對映
# 例項1:Series
# 並不是所有的函式都可以向量化
df['col1'].map(lambda x:x*2)
s.map(lambda x:x*2)
x = pd.Series([1,2,3], index=['a1', 'a2', 'a3'])
y = pd.Series(['v1', 'v2', 'v3'], index=[1,2,3])
x.map(y)#對映序列
# a1 v1
# a2 v2
# a3 v3
# dtype: object
z = {1: 'A', 2: 'B', 3: 'C'}
x.map(z)#對映字典
# a1 A
# a2 B
# a3 C
# dtype: object
s = pd.Series([1, 2, 3, np.nan])
s2 = s.map('str = {}'.format, na_action=None)#Na值
# 0 str = 1.0
# 1 str = 2.0
# 2 str = 3.0
# 3 str = nan
# dtype: object
s3 = s.map('str = {}'.format, na_action='ignore')
# 0 str = 1.0
# 1 str = 2.0
# 2 str = 3.0
# 3 NaN
# dtype: object
例項2:DataFrame
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.applymap(lambda x:x*2)
format = lambda x: "%.2f" % x
df.applymap(format)
# col1 col2 col3
# 0 1.00 2.00 3.00
# 1 4.00 5.00 6.00