基于ndarray二维数组转置,实现dataframe对象的转置
发布于 作者:苏南大叔 来源:程序如此灵动~

本文描述dataframe
对象的转置操作,在多次驰骋这些数据类型外,苏南大叔慢慢发现:dataframe
的背后就是ndarray
,dataframe
的很多操作都没有ndarray
的类似操作好用。本文对dataframe
对象的转置,也是基于ndarray
进行操作的。
大家好,这里是苏南大叔的“程序如此灵动”博客,本文描述对dataframe
对象的转置操作。测试环境:win10
,python@3.11.0
,numpy@1.24.2
,pandas@1.5.3
。
基本思路
对dataframe
对象的转置,实际上是对ndarray
二维数组的转置。所以,本文的思路非常简单,把dataframe
拆分出.values
,.columns
,.index
三项内容。然后在对ndarray
类型的.values
进行转置,同时调换columns
和index
标签,最后重新组装数据,完成需求。
拆分数据
拆分dataframe
的方法,基于如下文章内容:
获得数值:
df.values
获得标签:
df.columns
df.index
对.values
进行转置
因为df.values
的类型是ndarray
,所以关于【二维 】ndarray
的转置问题,有如下三种方案:
- https://newsn.net/say/ndarray-t.html
- https://newsn.net/say/ndarray-transpose.html
- https://newsn.net/say/ndarray-swapaxes.html
df.values.T
import numpy as np
np.transpose(df.values)
# np.transpose(df.values, axes=(2, 1, 0))
df.values.swapaxes(0,1)
当然最终选定的肯定是.T
方案,最简单实用。
组装成新的dataframe
dataframe
就是二维ndarray
加上个labels
(columns
+index
)。所以,把行列标签也转置了,就可以了。参考文章:
import pandas as pd
#...
pd.DataFrame(df.values.T,columns = df.index,index = df.columns)
测试代码
import pandas as pd
df = pd.DataFrame(
[("虎子", 5, "dog"),("老许", 3, "cat")],
columns=("name", "age", "label"),
index=("a1", "a2"),
)
print(df)
df2 = pd.DataFrame(df.values.T,columns = df.index,index = df.columns)
print(df2)
原版的dataframe
:
name age label
a1 虎子 5 dog
a2 老许 3 cat
被转置过的dataframe
:
a1 a2
name 虎子 老许
age 5 3
label dog cat
结束语
本文很水,有严重的凑字数嫌疑。看看其它的苏南大叔的文章,鉴定一下水分吧。


