pandas下的DataFrame、Series对象的apply
dataframe,series是pandas下的两种数据结构,
1.series下使用apply方法:自动遍历整个 Series,按照相对应的函数进行运算。
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会将series分解为一个个元素,传入函数中,进行计算,最后将所有的计算结果存储在一个新的 Series 中返回。
series.apply(pd.Series),能够将series对象转为Dataframe对象
se.apply(pd.Series)
2.Dataframe 下使用apply方法:自动遍历整个Dataframe,按照行或列进行运算
比如按照行计算:
def a(data):
print(data)
print(type(data))
data = data+3
print("--------")
return data
df1 = df.apply(a,axis=1)
type(df1)
可以看出,apply方法将Dataframe先分解为一个一个series数据对象,然后传入函数中,进行运算,最后将所有运算后series对象存储在一个Dataframe对象中。
如果在Dataframe的apply方法中,自定义的函数中,返回的不是series,是列表的话,我们需要先将列表转化为series,最后返回的才是Dataframe或者得到series,再转化为Dataframe.
def a(data):
list = []
data = data+3
list = [1,2]
return list
# df1 = df.apply(a,axis=1).apply(pd.Series) 得到series,再转化为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