pandas与numpy中神奇的axis
最近在百奥智汇兼职,基本上比较重的工作就在数据处理,所以pandas和numpy用的比较多。
不知不觉中,pandas各种函数越用越熟练,但是总要靠结果来推算到底应该指定axis=0还是1,你有没有这种经历呢?
经过摸索,我找到了一种axis利于记忆也好解释的理论。下面一起来看看吧!
核心内容
axis
是你要操作的轴。
pandas
导入包,创建一个3X4的dataframe。
import pandas as pd
import numpy as np
data = pd.DataFrame(np.random.randn(4,3))
data.sum(axis=1)
out:
0 -0.429278
1 0.415985
2 1.555418
3 3.364704
dtype: float64
axis=1
,说明我们要对第二个轴进行操作。
操作中处理的是第二个轴一共3个值,3个值被消灭了,被1个和值取代,结果是长度为4的series。
data.drop(1,axis=1)
out:
0 | 2 | |
---|---|---|
0 | -0.002617 | 0.345585 |
1 | 0.273499 | -0.386345 |
2 | 2.602432 | 0.284169 |
3 | 1.570347 | 1.656065 |
同样对第二个轴进行操作。
处理的是第二个轴3个值,3个值被drop掉1列后变为2个值,结果是4X2的dataframe。
data_ = pd.DataFrame(np.random.randn(4,3))
pd.concat([data,data_],axis=1)
out:
0 | 1 | 2 | 0 | 1 | 2 | |
---|---|---|---|---|---|---|
0 | -0.002617 | -0.772246 | 0.345585 | -0.349359 | -0.033281 | -0.774378 |
1 | 0.273499 | 0.528832 | -0.386345 | -1.630738 | 0.773259 | -0.953177 |
2 | 2.602432 | -1.331183 | 0.284169 | 1.714436 | 0.115564 | 2.480489 |
3 | 1.570347 | 0.138292 | 1.656065 | 0.229122 | 1.489628 | 3.029022 |
处理的是第二个轴,data
二轴3个值,拼接的data_
二轴也为3个值,所以结果是4X6的dataframe。
data.sort_values([0],axis=1)
out:
1 | 0 | 2 | |
---|---|---|---|
0 | -0.772246 | -0.002617 | 0.345585 |
1 | 0.528832 | 0.273499 | -0.386345 |
2 | -1.331183 | 2.602432 | 0.284169 |
3 | 0.138292 | 1.570347 | 1.656065 |
处理的是第二个轴3个值,对第一个轴name为0对应的3个值进行排序,从小到大,结果是4X3的dataframe。
来个更复杂的
下面为常见的归一化:
data.apply(lambda a:(a-np.min(a))/(np.max(a)-np.min(a)),axis=1)
out:
0 | 1 | 2 | |
---|---|---|---|
0 | 0.688502 | 0.0 | 1.000000 |
1 | 0.721001 | 1.0 | 0.000000 |
2 | 1.000000 | 0.0 | 0.410653 |
3 | 0.943524 | 0.0 | 1.000000 |
处理的是第二个轴3个值,对第一轴每一个name对应的三个值进行归一化处理,结果是4X3的dataframe 。
强行输出就会看的更清晰:
data.apply(lambda a:print(a),axis=1)
0 -0.002617
1 -0.772246
2 0.345585
Name: 0, dtype: float64
0