O2H2O 发表于 2021-6-9 13:53:12

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:41:32

本帖最后由 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


rsj0315 发表于 2021-6-9 15:48:33

df3=df.applymap(lambda x: )
print(df3.values,df3.dtypes)
看下这个结果
[) list()]
) list()]
) list()]] A    object
B    object
dtype: object

O2H2O 发表于 2021-6-10 09:26:18

rsj0315 发表于 2021-6-9 15:48
看下这个结果
[) list()]
) list()]


可以理解为.apply()是以整个轴为单位,看成1个x,而.applymap()是以每个元素为单位看成1个x,这样吗?

rsj0315 发表于 2021-6-10 13:14:22

O2H2O 发表于 2021-6-10 09:26
可以理解为.apply()是以整个轴为单位,看成1个x,而.applymap()是以每个元素为单位看成1个x,这样吗?

我的理解是这样的

阿奇_o 发表于 2021-6-10 16:04:33

本帖最后由 阿奇_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]
查看完整版本: pandas.DataFrame.apply的疑问