pandas的意思是什么?

这是我的代码来生成一个数据框:

import pandas as pd import numpy as np dff = pd.DataFrame(np.random.randn(1,2),columns=list('AB')) 

那么我得到的dataframe:

 +------------+---------+--------+ | | A | B | +------------+---------+--------- | 0 | 0.626386| 1.52325| +------------+---------+--------+ 

当我input命令:

 dff.mean(axis=1) 

我有 :

 0 1.074821 dtype: float64 

根据大pandas的参考,轴= 1代表列,我希望命令的结果是

 A 0.626386 B 1.523255 dtype: float64 

所以这里是我的问题:在pandas中轴是什么意思?

它指定了计算平均值的轴。 默认axis=0 。 这与显式指定axis (在numpy.mean ,axis == None(默认情况下,它计算平展数组上的平均值))中的numpy.mean用法一致,其中沿着行的 axis=0 (即index在pandas), axis=1沿

 +------------+---------+--------+ | | A | B | +------------+---------+--------- | 0 | 0.626386| 1.52325|----axis=1-----> +------------+---------+--------+ | | | axis=0 | ↓ ↓ 

axispd.DataFrame组的维数,在pd.DataFrame的情况下, axis=0是指向下的维度, axis=1指向右边的维度。

例子:想象一个具有形状的ndarray (3,5,7)

 a = np.ones((3,5,7)) 

a是三维ndarray ,即它具有三个轴 (“轴”是多个“轴”)。 a的configuration看起来像3片面包,其中每个片的尺寸为5×7。 a[0,:,:]指的是第0个片, a[1,:,:]指的是第1个片等

a.sum(axis=0)将沿着a的第0轴应用sum() 。 你将添加所有的切片,并最终形成一个切片(5,7)

a.sum(axis=0)相当于

 b = np.zeros((5,7)) for i in range(5): for j in range(7): b[i,j] += a[:,i,j].sum() 

ba.sum(axis=0)将看起来像这样

 array([[ 3., 3., 3., 3., 3., 3., 3.], [ 3., 3., 3., 3., 3., 3., 3.], [ 3., 3., 3., 3., 3., 3., 3.], [ 3., 3., 3., 3., 3., 3., 3.], [ 3., 3., 3., 3., 3., 3., 3.]]) 

pd.DataFrame ,坐标轴的工作方式与numpy.array相同: axis=0将为每列应用sum()或任何其他缩减函数。

NB在@ zhangxaochen的答案中,我发现短语“沿着行”和“沿着列”稍微混淆。 axis=0应该指“沿着每一列”,并且axis=1 “沿着每一行”。

大pandas的devise者韦斯·麦金尼(Wes McKinney)过去一直密切关注金融数据。 把柱子看作是每日价格的股票名称和指数。 然后,您可以猜测这个财务数据的默认行为是什么(即axis=0 )。 axis=1可以简单地认为是“另一个方向”。

例如,统计函数,如mean()sum()describe()count()所有默认为列明智,因为它是更有意义的做每个股票。 sort_index(by=)也默认为列。 fillna(method='ffill')将填充列,因为它是相同的股票。 dropna()默认为行,因为你可能只是想放弃当天的价格,而不是扔掉股票的所有价格。

同样,方括号索引也是指列,因为select股票而不是select一天更为常见。

我理解的最简单的方法是讨论是否计算每列( axis = 0 )或每行( axis = 1 )的统计量。 如果你计算一个统计量,比如说一个平均值, axis = 0你将得到每一列的统计量。 因此,如果每个观测值都是一行,而每个variables都在一列中,则可以得到每个variables的平均值。 如果你设置axis = 1那么你会计算每行的统计。 在我们的例子中,你会得到所有variables的每个观察的均值(也许你想要相关的度量的平均值)。

axis = 0 :by column = column-wise =沿着行

axis = 1 :by row = row-wise =沿列

这些答案确实有助于解释这一点,但是对于一个非程序员(即像我这样第一次在数据科学课程中学习Python的人)来说,这仍然不够完美。 我仍然觉得对行和列使用术语“沿”或“对于每个”是混淆的。

对我来说更有意义的是这样说:

  • 轴0将作用于每个列中的所有行
  • 轴1将在每个行的所有列上执行

因此,轴0上的平均值将是每列中所有行的平均值,而轴1上的平均值将是每行中所有列的平均值。

最终,这和@ zhangxaochen和@Michael说的是一样的,但是对我来说更容易内化。

考虑到编程的轴是形状元组中的位置。 这里是一个例子:

 import numpy as np a=np.arange(120).reshape(2,3,4,5) a.shape Out[3]: (2, 3, 4, 5) np.sum(a,axis=0).shape Out[4]: (3, 4, 5) np.sum(a,axis=1).shape Out[5]: (2, 4, 5) np.sum(a,axis=2).shape Out[6]: (2, 3, 5) np.sum(a,axis=3).shape Out[7]: (2, 3, 4) 

轴上的平均值将导致该维度被移除。

参考原始问题,dff形状是(1,2)。 使用轴= 1将形状更改为(1,)。

轴= 0表示从上到下轴= 1表示从左到右

 sums[key] = lang_sets[key].iloc[:,1:].sum(axis=0) 

给出的例子是在列==键的所有数据的总和。

这意味着它使用每个列的平均值,轴= 0会给你你的想法,但轴= 1给出

  (0.626386+1.52325)/2 1.075