您好,登录后才能下订单哦!
本篇内容主要讲解“Pandas.DataFrame行和列如何转置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Pandas.DataFrame行和列如何转置”吧!
如果要交换(转置)pandas.DataFrame的行和列,使用T属性或transpose()方法。
这两种方法都不会保留原始对象不变,也不会返回交换了行和列(转置)的新对象。请注意,根据每一列的数据类型dtype,将生成视图而不是副本,并且更改原始对象和转置对象之一的值将更改另一个视图。
可以使用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
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行和列如何转置”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。