如何理解pandas库dataframe类型方法里面的axis参数?
发布于 作者:苏南大叔 来源:程序如此灵动~
本文解读dataframe类型的各种方法里面的axis参数是什么意思,axis并不是属性,而是经常出现在各种函数方法里面的参数。其实,一句话总结本文的话,axis就是表述操作的是数据流的运动方向,axis=1为一列一列推进,axis=0为一行一行推进。

大家好,这里是苏南大叔的程序如此灵动博客,记录苏南大叔的代码编程感悟。本文描述dataframe的世界里面,axis究竟代表着什么意思。测试环境:python@3.11.0,win10。
方法综述
在前面的文章里面,对dataframe里面进行列删除或者列合并操作的时候,都曾经涉及到axis的概念。参考文章:
总的原则,是表述数据流推进的方向:
axis=1还可以表述为:axis="columns",数据流方向为一列一列(从左到右)推进。axis=0还可以表述为:axis="index",数据流方向为一行一行(从上到下)推进。

为了更好的理解本文的内容,本文还增加了一个.sum()方法,作用是对某行或某列数据求和。本文共涉及三个方法:
| 方法名 | 作用 |
|---|---|
df.sum() | 求和 |
df.drop() | 删除 |
pd.concat() | 合并 |
范例数据
现在定义了两个dataframe数据,用于后续的演示:
import pandas as pd
df = pd.DataFrame(
[[1, 2, 3], [3, 2, 1], [5, 6, 7]],
columns=["col1", "col2", "col3"],
index=["row1", "row2", "row3"],
)
print(df)
df2 = pd.DataFrame(
[[0, 0, 0], [5, 5, 5], [9, 9, 9]],
columns=["col1", "col2", "col3"],
index=["row1", "row2", "row3"],
)
print(df2)
输出:
col1 col2 col3
row1 1 2 3
row2 3 2 1
row3 5 6 7 col1 col2 col3
row1 0 0 0
row2 5 5 5
row3 9 9 9axis=1/axis="columns",水平一列一列推进
axis=1/axis="columns",数据流沿【水平方向】流动,从左到右一列一列推进。
df.sum(axis=1)是针对每一行求和。df.drop(col, axis=1)是去掉某一列(或某几列)数据。pd.concat([df, df2], axis=1)是叠加在右侧的。

测试代码之求每行的和:
print(df.sum(axis=1))输出结果:
row1 6
row2 6
row3 18
dtype: int64测试代码之删除某几列:
print(df.drop("col1", axis=1))
print(df.drop(["col1","col2"], axis="columns"))输出结果:
col2 col3
row1 2 3
row2 2 1
row3 6 7 col3
row1 3
row2 1
row3 7测试代码之合并到右侧:
print(pd.concat([df, df2], axis=1))输出为:
col1 col2 col3 col1 col2 col3
row1 1 2 3 0 0 0
row2 3 2 1 5 5 5
row3 5 6 7 9 9 9axis=0/axis="index",垂直一行一行推进
axis=0/axis="index",数据流沿着【垂直方向】流动,所以:
df.sum(axis=0)是针对每一列求和。df.drop(index, axis=0)是删除某一行(或某几行)数据。pd.concat([df, df2], axis=1)效果是叠加在底部的。

测试代码之求每列的和:
print(df.sum(axis=0))输出结果:
col1 9
col2 10
col3 11
dtype: int64测试代码之删除某几行:
print(df.drop("row1", axis=0))
print(df.drop(["row1","row2"], axis="index"))输出结果:
col1 col2 col3
row2 3 2 1
row3 5 6 7 col1 col2 col3
row3 5 6 7测试代码之合并到下方:
print(pd.concat([df, df2], axis=0))输出为:
col1 col2 col3
row1 1 2 3
row2 3 2 1
row3 5 6 7
row1 0 0 0
row2 5 5 5
row3 9 9 9结束语
苏南大叔的更多python文章,请点击: