|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
关于apply的用法,假设有一个DataFrame
- >>> df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
- >>> df
- A B
- 0 4 9
- 1 4 9
- 2 4 9
复制代码
如果对df引入lambda x :x+1函数,结果比较好理解
- >>> df.apply(lambda x :x+1)
- A B
- 0 5 10
- 1 5 10
- 2 5 10
复制代码
如果引入lambda x: [1, 2],就看不懂了,
- >>> df.apply(lambda x: [1, 2],axis=0)
- A B
- 0 1 1
- 1 2 2
- >>> df.apply(lambda x: [1, 2], axis=1)
- 0 [1, 2]
- 1 [1, 2]
- 2 [1, 2]
- dtype: object
复制代码
例子来源于https://pandas.pydata.org/pandas ... das.DataFrame.apply
问题1:lambda x: [1, 2],冒号右边没有x,意思是每一个x的返回值都是 [1, 2]吗?
问题2:df.apply(lambda x: [1, 2],axis=0)的结果为啥少了一行,而df.apply(lambda x: [1, 2], 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: [1, 2], axis=0)
- print(df.values,df.dtypes)
复制代码
看下dtypes就不难理解了。
相当于每列数据换成了一个列表【1,2】;
=====
[list([1, 2]) list([1, 2])] object
----------------------
同理axis=1是把每一行数据换成了
=====
[list([1, 2]) list([1, 2]) list([1, 2])] object
|
|