文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Pandas.DataFrame行和列如何转置

2023-07-05 05:35

关注

本篇内容主要讲解“Pandas.DataFrame行和列如何转置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Pandas.DataFrame行和列如何转置”吧!

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

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

pandas.DataFrame.T

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

import pandas as pddf = 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  5print(df.T)#    A  B  C# X  0  1  2# Y  3  4  5

pandas.DataFrame.transpose()

transpose()方法类似。

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

修改原始对象本身

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

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

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

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

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

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  5print(df.dtypes)# X    int64# Y    int64# dtype: objectprint(df.T)#    A  B  C# X  0  1  2# Y  3  4  5print(df.T.dtypes)# A    int64# B    int64# C    int64# dtype: object

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

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.3print(df_mix.dtypes)# col_int        int64# col_float    float64# dtype: objectprint(df_mix.T)#              A    B    C# col_int    0.0  1.0  2.0# col_float  0.1  0.2  0.3print(df_mix.T.dtypes)# A    float64# B    float64# C    float64# dtype: object

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

print(df_mix.T.T)#    col_int  col_float# A      0.0        0.1# B      1.0        0.2# C      2.0        0.3print(df_mix.T.T.dtypes)# col_int      float64# col_float    float64# dtype: object

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

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       cprint(df_mix2.dtypes)# col_int        int64# col_float    float64# col_str       object# dtype: objectprint(df_mix2.T)#              A    B    C# col_int      0    1    2# col_float  0.1  0.2  0.3# col_str      a    b    cprint(df_mix2.T.dtypes)# A    object# B    object# C    object# dtype: objectprint(df_mix2.T.T)#   col_int col_float col_str# A       0       0.1       a# B       1       0.2       b# C       2       0.3       cprint(df_mix2.T.T.dtypes)# col_int      object# col_float    object# col_str      object# dtype: object

视图和复制

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

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

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  5df_T = df.Tprint(df_T)#    A  B  C# X  0  1  2# Y  3  4  5df_transpose = df.transpose()print(df_transpose)#    A  B  C# X  0  1  2# Y  3  4  5df.at['A', 'X'] = 100print(df)#      X  Y# A  100  3# B    1  4# C    2  5print(df_T)#      A  B  C# X  100  1  2# Y    3  4  5print(df_transpose)#      A  B  C# X  100  1  2# Y    3  4  5

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

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.3df_mix_T = df_mix.Tprint(df_mix_T)#              A    B    C# col_int    0.0  1.0  2.0# col_float  0.1  0.2  0.3df_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.3df_mix.at['A', 'col_int'] = 100print(df_mix)#    col_int  col_float# A      100        0.1# B        1        0.2# C        2        0.3print(df_mix_T)#              A    B    C# col_int    0.0  1.0  2.0# col_float  0.1  0.2  0.3print(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时,将生成一个副本。

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  5df_T_copy = df.T.copy()print(df_T_copy)#    A  B  C# X  0  1  2# Y  3  4  5df_transpose_copy = df.transpose(copy=True)print(df_transpose_copy)#    A  B  C# X  0  1  2# Y  3  4  5df.at['A', 'X'] = 100print(df)#      X  Y# A  100  3# B    1  4# C    2  5print(df_T_copy)#    A  B  C# X  0  1  2# Y  3  4  5print(df_transpose_copy)#    A  B  C# X  0  1  2# Y  3  4  5

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

到此,相信大家对“Pandas.DataFrame行和列如何转置”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯