dataframe,series是pandas下的兩種數(shù)據(jù)結(jié)構(gòu),
1.series下使用apply方法:自動(dòng)遍歷整個(gè)?Series,按照相對(duì)應(yīng)的函數(shù)進(jìn)行運(yùn)算。
import pandas as pd
df = pd.DataFrame({"a":[i for i in range(5)],"b":[i+1 for i in range(4,9)]})
df.head()

print(type(df.a))
def test(data):
? ? print(data)
? ? print(type(data))
? ? data = data +1
? ? print('________')
? ? return data
se = df.a.apply(test)
se

可以看出,series使用apply方法后,apply會(huì)將series分解為一個(gè)個(gè)元素,傳入函數(shù)中,進(jìn)行計(jì)算,最后將所有的計(jì)算結(jié)果存儲(chǔ)在一個(gè)新的?Series?中返回。
series.apply(pd.Series),能夠?qū)eries對(duì)象轉(zhuǎn)為Dataframe對(duì)象
se.apply(pd.Series)

2.Dataframe?下使用apply方法:自動(dòng)遍歷整個(gè)Dataframe,按照行或列進(jìn)行運(yùn)算
比如按照行計(jì)算:
def a(data):
? ? print(data)
? ? print(type(data))
? ? data = data+3
? ? print("--------")
? ? return data
df1 = df.apply(a,axis=1)
type(df1)

可以看出,apply方法將Dataframe先分解為一個(gè)一個(gè)series數(shù)據(jù)對(duì)象,然后傳入函數(shù)中,進(jìn)行運(yùn)算,最后將所有運(yùn)算后series對(duì)象存儲(chǔ)在一個(gè)Dataframe對(duì)象中。
如果在Dataframe的apply方法中,自定義的函數(shù)中,返回的不是series,是列表的話,我們需要先將列表轉(zhuǎn)化為series,最后返回的才是Dataframe或者得到series,再轉(zhuǎn)化為Dataframe.
def a(data):
? ? list = []
? ? data = data+3
? ? list = [1,2]
? ? return list
# df1 = df.apply(a,axis=1).apply(pd.Series)? 得到series,再轉(zhuǎn)化為Dataframe,這種不能自定義index,后面的可以。
# df1 = df.apply(a,axis=1)? 需要將return list 改為 return??pd.Series(list),
df1 = df.apply(lambda x:pd.Series(a(x)),axis=1)?
df1
