本文作者:云初冀北

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

Pandas.DataFrame行和列的转置的实现摘要: 如果要交换(转置)pandas.DataFrame的行和列,使用T属性或transpose()方法。这两种方法都不会保留原始对象不变,也不会返回交换了行和列(转置)的新对象。请注意...

?=如果要交换转置pandas.DataFrame使用T属性或transpose()方法

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

Pandas.dataframe.T

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

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()方法似。

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

修改原始对象本身

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

df = df.T print(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  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。

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()来转换数据类型。

​ 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的字符串是对象类型。

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()将返回视图。

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

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()将生成一个副本。转置的对象保留一个新的存储区,因此,如果更改一个的值,则另一个将保持不变。

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时,将生成一个副本。

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行列转置内容请搜索云初冀北以前的文章或继续浏览下面的相关文章希望大家以后多多支持云初冀北!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:Goliszhou@gmail.com
$

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,161人围观)参与讨论

还没有评论,来说两句吧...