1. 程式人生 > >pandas 學習彙總13 - 函式應用- 將自定義或其他庫函式應用於Pandas物件( tcy)

pandas 學習彙總13 - 函式應用- 將自定義或其他庫函式應用於Pandas物件( tcy)

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