脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Pandas.DataFrame行和列的转置的实现

Pandas.DataFrame行和列的转置的实现

2023-02-26 14:35饺子大人 Python

本文主要介绍了Pandas.DataFrame行和列的转置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

如果要交换(转置)pandas.DataFrame的行和列,使用T属性或transpose()方法。

这两种方法都不会保留原始对象不变,也不会返回交换了行和列(转置)的新对象。请注意,根据每一列的数据类型dtype,将生成视图而不是副本,并且更改原始对象和转置对象之一的值将更改另一个视图。

pandas.DataFrame.T

可以使用T属性获得转置的pandas.DataFrame。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
import pandas as pd
 
df = pd.DataFrame({'X': [0, 1, 2], 'Y': [3, 4, 5]}, index=['A', 'B', 'C'])
print(df)
#    X  Y
# A  0  3
# B  1  4
# C  2  5
 
print(df.T)
#    A  B  C
# X  0  1  2
# Y  3  4  5

pandas.DataFrame.transpose()

transpose()方法类似。

?
1
2
3
4
print(df.transpose())
#    A  B  C
# X  0  1  2
# Y  3  4  5

修改原始对象本身

没有像inplace这样的参数可以修改原始对象本身。如果不想创建新对象,只需将其分配给原始对象本身即可。

?
1
2
3
4
5
df = df.T
print(df)
#    A  B  C
# X  0  1  2
# Y  3  4  5

当进行类型转换(广播)时

为pandas.DataFrame中的每一列设置数据类型dtype。

如果所有列都具有相同的数据类型,则即使通过T或transpose()进行转置,该数据类型也将保持相同。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
df = pd.DataFrame({'X': [0, 1, 2], 'Y': [3, 4, 5]}, index=['A', 'B', 'C'])
print(df)
#    X  Y
# A  0  3
# B  1  4
# C  2  5
 
print(df.dtypes)
# X    int64
# Y    int64
# dtype: object
 
print(df.T)
#    A  B  C
# X  0  1  2
# Y  3  4  5
 
print(df.T.dtypes)
# A    int64
# B    int64
# C    int64
# dtype: object

如果每一列都有不同的数据类型,则执行类型转换(广播)。例如,如果作为转置的结果生成了其中混合了整数int和浮点数float的列,则该列的数据类型变为float。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
df_mix = pd.DataFrame({'col_int': [0, 1, 2], 'col_float': [0.1, 0.2, 0.3]}, index=['A', 'B', 'C'])
print(df_mix)
#    col_int  col_float
# A        0        0.1
# B        1        0.2
# C        2        0.3
 
print(df_mix.dtypes)
# col_int        int64
# col_float    float64
# dtype: object
 
print(df_mix.T)
#              A    B    C
# col_int    0.0  1.0  2.0
# col_float  0.1  0.2  0.3
 
print(df_mix.T.dtypes)
# A    float64
# B    float64
# C    float64
# dtype: object

即使再次转置它也无法还原。需要应用astype()来转换数据类型。

?
1
2
3
4
5
6
7
8
9
10
11
print(df_mix.T.T)
#    col_int  col_float
# A      0.0        0.1
# B      1.0        0.2
# C      2.0        0.3
 
print(df_mix.T.T.dtypes)
# col_int      float64
# col_float    float64
# dtype: object

元素为字符串str的字符串是对象类型。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
df_mix2 = pd.DataFrame({'col_int': [0, 1, 2], 'col_float': [0.1, 0.2, 0.3], 'col_str': ['a', 'b', 'c']},
                       index=['A', 'B', 'C'])
print(df_mix2)
#    col_int  col_float col_str
# A        0        0.1       a
# B        1        0.2       b
# C        2        0.3       c
 
print(df_mix2.dtypes)
# col_int        int64
# col_float    float64
# col_str       object
# dtype: object
 
print(df_mix2.T)
#              A    B    C
# col_int      0    1    2
# col_float  0.1  0.2  0.3
# col_str      a    b    c
 
print(df_mix2.T.dtypes)
# A    object
# B    object
# C    object
# dtype: object
 
print(df_mix2.T.T)
#   col_int col_float col_str
# A       0       0.1       a
# B       1       0.2       b
# C       2       0.3       c
 
print(df_mix2.T.T.dtypes)
# col_int      object
# col_float    object
# col_str      object
# dtype: object

视图和复制

如果所有列都具有相同的数据类型,则T或transpose()将返回视图。

原始对象和视图对象共享内存,因此更改一个元素会更改另一个元素。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
df = pd.DataFrame({'X': [0, 1, 2], 'Y': [3, 4, 5]}, index=['A', 'B', 'C'])
print(df)
#    X  Y
# A  0  3
# B  1  4
# C  2  5
 
df_T = df.T
print(df_T)
#    A  B  C
# X  0  1  2
# Y  3  4  5
 
df_transpose = df.transpose()
print(df_transpose)
#    A  B  C
# X  0  1  2
# Y  3  4  5
 
df.at['A', 'X'] = 100
print(df)
#      X  Y
# A  100  3
# B    1  4
# C    2  5
 
print(df_T)
#      A  B  C
# X  100  1  2
# Y    3  4  5
 
print(df_transpose)
#      A  B  C
# X  100  1  2
# Y    3  4  5

如果每一列的数据类型dtype不同,则T或transpose()将生成一个副本。转置的对象保留一个新的存储区,因此,如果更改一个的值,则另一个将保持不变。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
df_mix = pd.DataFrame({'col_int': [0, 1, 2], 'col_float': [0.1, 0.2, 0.3]}, index=['A', 'B', 'C'])
print(df_mix)
#    col_int  col_float
# A        0        0.1
# B        1        0.2
# C        2        0.3
 
df_mix_T = df_mix.T
print(df_mix_T)
#              A    B    C
# col_int    0.0  1.0  2.0
# col_float  0.1  0.2  0.3
 
df_mix_transpose = df_mix.transpose()
print(df_mix_transpose)
#              A    B    C
# col_int    0.0  1.0  2.0
# col_float  0.1  0.2  0.3
 
df_mix.at['A', 'col_int'] = 100
print(df_mix)
#    col_int  col_float
# A      100        0.1
# B        1        0.2
# C        2        0.3
 
print(df_mix_T)
#              A    B    C
# col_int    0.0  1.0  2.0
# col_float  0.1  0.2  0.3
 
print(df_mix_transpose)
#              A    B    C
# col_int    0.0  1.0  2.0
# col_float  0.1  0.2  0.3

如果仅在后续过程中使用转置的转置,则不必担心。以显式创建副本。在transpose()中,当参数copy设置为True时,将生成一个副本。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
df = pd.DataFrame({'X': [0, 1, 2], 'Y': [3, 4, 5]}, index=['A', 'B', 'C'])
print(df)
#    X  Y
# A  0  3
# B  1  4
# C  2  5
 
df_T_copy = df.T.copy()
print(df_T_copy)
#    A  B  C
# X  0  1  2
# Y  3  4  5
 
df_transpose_copy = df.transpose(copy=True)
print(df_transpose_copy)
#    A  B  C
# X  0  1  2
# Y  3  4  5
 
df.at['A', 'X'] = 100
print(df)
#      X  Y
# A  100  3
# B    1  4
# C    2  5
 
print(df_T_copy)
#    A  B  C
# X  0  1  2
# Y  3  4  5
 
print(df_transpose_copy)
#    A  B  C
# X  0  1  2
# Y  3  4  5

transpose()的参数副本默认为False,如果可能,则生成视图而不是副本。如上例所示,当每列的数据类型dtype不同时,即使它是默认值(copy = False),也会生成一个副本。不一定是视图。

到此这篇关于Pandas.DataFrame行和列的转置的实现的文章就介绍到这了,更多相关Pandas.DataFrame行列转置内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_18351157/article/details/105931547

延伸 · 阅读

精彩推荐
  • Python专属 Python 开发的完美终端工具

    专属 Python 开发的完美终端工具

    Rich 是一个非常强大的 Python 库,不仅在终端中提供丰富的文本和漂亮的格式,还可以显示表情符号、表格、进度条、标记,甚至语法突出显示的代码。...

    Python编程5442021-08-06
  • PythonPyQt5每天必学之关闭窗口

    PyQt5每天必学之关闭窗口

    这篇文章主要为大家详细介绍了PyQt5每天必学之关闭窗口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    我的世界你曾经来过6452021-02-02
  • Pythonpython离散建模之感知器学习算法

    python离散建模之感知器学习算法

    这篇文章主要介绍了python离散建模之感知器学习算法,感知机学习算法是支持向量机的基础,支持向量机通过核函数进行非线性分类,支持向量机也是感知...

    努力奋斗的K崽11882022-09-30
  • Pythonpython中numpy包使用教程之数组和相关操作详解

    python中numpy包使用教程之数组和相关操作详解

    这篇文章主要给大家介绍了关于python中numpy包的使用教程,包含数组和相关操作等内容,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价...

    一路前行13632020-11-29
  • Pythonpython爬取w3shcool的JQuery课程并且保存到本地

    python爬取w3shcool的JQuery课程并且保存到本地

    本文主要介绍python爬取w3shcool的JQuery的课程并且保存到本地的方法解析。具有很好的参考价值。下面跟着小编一起来看下吧...

    北漂的雷子4362020-09-28
  • PythonPython反射的用法实例分析

    Python反射的用法实例分析

    这篇文章主要介绍了Python反射的用法,结合实例形式分析了Python反射机制所涉及的几个常用方法与相关使用技巧,需要的朋友可以参考下...

    喷跑的豆子5862021-01-15
  • Pythonpython自动统计zabbix系统监控覆盖率的示例代码

    python自动统计zabbix系统监控覆盖率的示例代码

    这篇文章主要介绍了python自动统计zabbix系统监控覆盖率的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友...

    huss7662021-10-03
  • Pythonpython机器学习理论与实战(五)支持向量机

    python机器学习理论与实战(五)支持向量机

    这篇文章主要为大家详细介绍了python机器学习理论与实战第五篇,支持向量机的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    marvin5217312021-01-06