pandas批量运算主要分按行,按列跟按dataframe计算。一般来说,是for循环的替代算法。
批量运算一般是用自定义def或者自带函数,根据def参数的情况就可以分为单参数和多参数,先说按列的map函数
map:
单列:
dataframe['列名'].map(函数名)
比如df['code'].map(savetomysql)
其中:
df['code']:dataframe里的code这一列
savetomysql是我自定义的def,它应该有一个参数,或者有多个参数但其他参数都有默认值。def savetomysql(code,date=2...)
多列:
list(map(lambda x, y: 函数(x, y), dataframe['列名1'], dataframe['列名2']))
比如list(map(lambda x, y: getdata(x, y), df['code'], df['date']))
若有其他固定参数,放在lambda里面:list(map(lambda x, y,z=5: getdata(x, y,z), df['code'], df['date']))
特别说明的是getdata返回值是多个的话,可以用list返回,然后变成dataframe拼接到原始数据中。
比如:
getdata return [A,B,C],列名是‘A’,‘B’,‘C’
df是原始dataframe
rate = list(map(lambda x, y: getdata(x, y), ori['code'], ori['date']))
name = 'code,date,A,B,C'
col = name.split(',')
temp = pd.DataFrame(data=rate, columns=col)
df1= pd.merge(df, temp, on=['code', 'date']) #加列
df1就是根据两列生成新的dataframe,我经常这么做。
网友评论