如何理解pandas(Python)中的axis = 0或1?
从文档中,“第一个垂直向下横跨行(轴0),第二个水平横跨列(轴1)”并且代码是
df1 = pd.DataFrame({"x":[1, 2, 3, 4, 5],
"y":[3, 4, 5, 6, 7]},
index=['a', 'b', 'c', 'd', 'e'])
df2 = pd.DataFrame({"y":[1, 3, 5, 7, 9],
"z":[9, 8, 7, 6, 5]},
index=['b', 'c', 'd', 'e', 'f'])
pd.concat([df1, df2], join='inner') # by default axis=0
因为轴= 0(我解释为列)我认为concat只考虑在两个数据框中找到的列。 但是,acutal输出会考虑在两个数据框中找到的行(唯一的常见行元素'y')那么我应该如何正确理解axis = 0,1?
数据:
In [55]: df1
Out[55]:
x y
a 1 3
b 2 4
c 3 5
d 4 6
e 5 7
In [56]: df2
Out[56]:
y z
b 1 9
c 3 8
d 5 7
e 7 6
f 9 5
水平连接(axis = 1),使用在两个DF中找到的索引元素 (通过索引进行对齐以进行连接):
In [57]: pd.concat([df1, df2], join='inner', axis=1)
Out[57]:
x y y z
b 2 4 1 9
c 3 5 3 8
d 4 6 5 7
e 5 7 7 6
垂直连接(DEFAULT:axis = 0),使用在两个DF中找到的列 :
In [58]: pd.concat([df1, df2], join='inner')
Out[58]:
y
a 3
b 4
c 5
d 6
e 7
b 1
c 3
d 5
e 7
f 9
如果你不使用inner
连接方法 - 你会这样做:
In [62]: pd.concat([df1, df2])
Out[62]:
x y z
a 1.0 3 NaN
b 2.0 4 NaN
c 3.0 5 NaN
d 4.0 6 NaN
e 5.0 7 NaN
b NaN 1 9.0
c NaN 3 8.0
d NaN 5 7.0
e NaN 7 6.0
f NaN 9 5.0
In [63]: pd.concat([df1, df2], axis=1)
Out[63]:
x y y z
a 1.0 3.0 NaN NaN
b 2.0 4.0 1.0 9.0
c 3.0 5.0 3.0 8.0
d 4.0 6.0 5.0 7.0
e 5.0 7.0 7.0 6.0
f NaN NaN 9.0 5.0
解释axis = 0将算法应用于每列,或者应用到行标签(索引)。这里有一个更详细的模式。
如果你将这个一般解释应用于你的案例,这里的算法是concat
。 因此,对于轴= 0,这意味着:
对于每列,将所有行向下(在所有数据框中进行concat
),并在它们相同时进行联系(因为您选择了join=inner
)。
所以意思是把所有的列都放在x
,然后将它们连接在一起的行上,这些行将堆叠起来。 然而,这里x
并不是到处都有,所以它不会保留最终结果。 这同样适用于z
。 对于y
,结果保留为y
,在所有数据框中。 这是你的结果。
首先,OP误解了他/她的数据框中的行和列。
但是,acutal输出会考虑在两个数据框中找到的行(唯一的常见行元素'y')
OP认为标签y
是针对行的。 但是, y
是一个列名。
df1 = pd.DataFrame(
{"x":[1, 2, 3, 4, 5], # <-- looks like row x but actually col x
"y":[3, 4, 5, 6, 7]}, # <-- looks like row y but actually col y
index=['a', 'b', 'c', 'd', 'e'])
print(df1)
col x y
index or row
a 1 3 | a
b 2 4 v x
c 3 5 r i
d 4 6 o s
e 5 7 w 0
-> column
a x i s 1
在字典中很容易被误导,看起来y
和x
是两行。
如果您从列表中生成df1
,它应该更直观:
df1 = pd.DataFrame([[1,3],
[2,4],
[3,5],
[4,6],
[5,7]],
index=['a', 'b', 'c', 'd', 'e'], columns=["x", "y"])
因此,回到该问题, concat
是用于连接一个速记(意味着在一系列或链连接在一起的这种方式[源])执行concat
沿着轴线0表示沿着轴线0连接两个对象。
1
1 <-- series 1
1
^ ^ ^
| | | 1
c a a 1
o l x 1
n o i gives you 2
c n s 2
a g 0 2
t | |
| V V
v
2
2 <--- series 2
2
所以...认为你现在有这种感觉。 那么熊猫的sum
功能呢? sum(axis=0)
是什么意思?
假设数据看起来像
1 2
1 2
1 2
也许...... 沿轴0求和,你可能会猜到。 是!!
^ ^ ^
| | |
s a a
u l x
m o i gives you two values 3 6 !
| n s
v g 0
| |
V V
那么dropna
呢? 假设你有数据
1 2 NaN
NaN 3 5
2 4 6
而你只想保持
2
3
4
在文档中,它表示返回对象的给定轴上的标签被忽略,其中交替地丢失了任何或全部数据
你应该把dropna(axis=0)
还是dropna(axis=1)
? 考虑一下并尝试一下
df = pd.DataFrame([[1, 2, np.nan],
[np.nan, 3, 5],
[2, 4, 6]])
# df.dropna(axis=0) or df.dropna(axis=1) ?
提示:一起考虑这个词。
链接地址: http://www.djcxy.com/p/93003.html上一篇: how to understand axis = 0 or 1 in pandas (Python)?
下一篇: Can't find package on Anaconda Navigator. What to do next?