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 | ↓ ↓
axis
是pd.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()
b
和a.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