pandas.DataFrame.apply的疑问
关于apply的用法,假设有一个DataFrame>>> df = pd.DataFrame([] * 3, columns=['A', 'B'])
>>> df
AB
049
149
249
如果对df引入lambda x :x+1函数,结果比较好理解
>>> df.apply(lambda x :x+1)
A B
0510
1510
2510
如果引入lambda x: ,就看不懂了,
>>> df.apply(lambda x: ,axis=0)
AB
011
122
>>> df.apply(lambda x: , axis=1)
0
1
2
dtype: object
例子来源于https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html?highlight=pandas%20dataframe%20apply#pandas.DataFrame.apply
问题1:lambda x: ,冒号右边没有x,意思是每一个x的返回值都是 吗?
问题2:df.apply(lambda x: ,axis=0)的结果为啥少了一行,而df.apply(lambda x: , axis=1)少了一列,而且返回的内容也不同?
烦请高手指点,谢谢! 本帖最后由 rsj0315 于 2021-6-9 15:42 编辑
收线dataframe,axis=0作用的是列,1是行
官方文档原话“0 or ‘index’: apply function to each column.
1 or ‘columns’: apply function to each row.”
df=df.apply(lambda x: , axis=0)
print(df.values,df.dtypes)
看下dtypes就不难理解了。
相当于每列数据换成了一个列表【1,2】;
=====
) list()] object
----------------------
同理axis=1是把每一行数据换成了
=====
) list() list()] object
df3=df.applymap(lambda x: )
print(df3.values,df3.dtypes)
看下这个结果
[) list()]
) list()]
) list()]] A object
B object
dtype: object rsj0315 发表于 2021-6-9 15:48
看下这个结果
[) list()]
) list()]
可以理解为.apply()是以整个轴为单位,看成1个x,而.applymap()是以每个元素为单位看成1个x,这样吗? O2H2O 发表于 2021-6-10 09:26
可以理解为.apply()是以整个轴为单位,看成1个x,而.applymap()是以每个元素为单位看成1个x,这样吗?
我的理解是这样的 本帖最后由 阿奇_o 于 2021-6-10 16:16 编辑
你再仔细读两遍文档对参数的解释:
func : function
Function to apply to each column or row.
axis : {0 or ‘index’, 1 or ‘columns’}, default 0
Axis along which the function is applied:
0 or ‘index’: apply function to each column.
1 or ‘columns’: apply function to each row.
axis = 0, 相当于 构造df时,这样 pd.DataFrame( {'A': , 'B': } )
即 0 or ‘index’: apply function to each column.
axis = 1, 即 相当于 pd.DataFrame( [ , , ] )
即 1 or ‘columns’: apply function to each row.
应该很清楚了吧。
另外,对于df.apply(lambda x: x+1) 时,它比较“智能”,
它“知道”你是想要对每行或每列里的每个值进行+1,这种情况和用法很常见,故更易理解。
{:10_297:}
页:
[1]