python的axis=0 or 1 ?(迷糊笔记)

之前学了numpy和pandas对axis这个参数感觉很懵。。。。

看了好多博博客,然而感觉。。。。还是很懵。。我可能太笨了吧

没办法死死记硬背吧,大佬如果有好的理解方法麻烦中在下方评论一下啊。。。

下面是个人的理解

首先什么是轴?

Pandas保持了Numpy对关键字axis的用法,用法在Numpy库的词汇表当中有过解释:

轴用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸。

这个句话我也是没太读明白,我认为吧这个应该是观看整个数据的方法,0轴是沿着行然后一行一行的往下看,以下图为例(就是假如是axis=0,那么看这个数据的方法是 [0、1、2]然后[1,2,3]之后[1,2,3]......。。axis=1的话就是[0,1,1,1,1]z之后[1,2,2,2,2])

注:是个人理解,看看就好,我不太懂别误人子弟咯。

 

所以问题当中第一个列子 df.mean(axis=1)代表沿着列水平方向计算均值,而第二个列子df.drop(name, axis=1) 代表将name对应的列标签(们)沿着水平的方向依次删掉。

看如下代码:(来自:https://www.cnblogs.com/rrttp/p/8028421.html

>>>df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], \
columns=["col1", "col2", "col3", "col4"])
>>>df
   col1  col2  col3  col4
    0     1     1     1     1
    1     2     2     2     2
    2     3     3     3     3

如果我们调用df.mean(axis=1),我们将得到按行计算的均值

>>> df.mean(axis=1)
0    1
1    2
2    3

然而,如果我们调用 df.drop((name, axis=1),我们实际上删掉了一列,而不是一行:

>>> df.drop("col4", axis=1)
   col1  col2  col3
0     1     1     1
1     2     2     2
2     3     3     

上方列出的博客写了一些跨行跨列的思想,我没看懂。。。

但是最后的几句话挺好:所以问题当中第一个列子 df.mean(axis=1)代表沿着列水平方向计算均值,而第二个列子df.drop(name, axis=1) 代表将name对应的列标签(们)沿着水平的方向依次删掉。

mean(axis=1)axis=1代表的就是看数据的方式,1代表是:第1轴沿着列的方向水平延伸(我上方举的例子:axis=1的话就是[0,1,1,1,1]之后看[1,2,2,2,2]

drop(name, axis=1) axis=1还是代表是:第1轴沿着列的方向水平延伸,但是前边指定了name参数。col4它是一个列,沿着列的方向水平延伸,水平延伸的话还是这个col4这列,所以看中就只是沿着列了,那么删除的展现形式是删除了一列(将name对应的列标签(们)沿着水平的方向依次删掉

 

Pandas的合并:

concat(axis=0),默认axis=0,向下合并

#定义资料集
df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'])
df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])
df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d'])

#concat纵向合并
res = pd.concat([df1, df2, df3], axis=0)

#打印结果
print(res)
#     a    b    c    d
# 0  0.0  0.0  0.0  0.0
# 1  0.0  0.0  0.0  0.0
# 2  0.0  0.0  0.0  0.0
# 0  1.0  1.0  1.0  1.0
# 1  1.0  1.0  1.0  1.0
# 2  1.0  1.0  1.0  1.0
# 0  2.0  2.0  2.0  2.0
# 1  2.0  2.0  2.0  2.0
# 2  2.0  2.0  2.0  2.0

第0轴沿着行的垂直往下,那么就是向下加咯。

 

Numpy合并:(和pandas一样咯)

A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])[:,np.newaxis]
'''
[[1]
[1]
[1]]

[[2]
[2]
[2]]
'''
C = np.concatenate((A,B,B,A),axis=0)

print(C)
"""
array([[1],
       [1],
       [1],
       [2],
       [2],
       [2],
       [2],
       [2],
       [2],
       [1],
       [1],
       [1]])
"""

D = np.concatenate((A,B,B,A),axis=1)

print(D)
"""
array([[1, 2, 2, 1],
       [1, 2, 2, 1],
       [1, 2, 2, 1]])
"""

个人对concat的axis理解:

axis=0:第0轴沿着行的垂直往下np.concatenate((A,B,B,A),axis=0),那么就是先A,然后向下在连接B,依次向下连接B、A。

axis=1:第1轴沿着列的方向水平延伸,同理。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值