您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Pandas.DataFrame行和列如何轉(zhuǎn)置”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Pandas.DataFrame行和列如何轉(zhuǎn)置”吧!
如果要交換(轉(zhuǎn)置)pandas.DataFrame的行和列,使用T屬性或transpose()方法。
這兩種方法都不會保留原始對象不變,也不會返回交換了行和列(轉(zhuǎn)置)的新對象。請注意,根據(jù)每一列的數(shù)據(jù)類型dtype,將生成視圖而不是副本,并且更改原始對象和轉(zhuǎn)置對象之一的值將更改另一個視圖。
可以使用T屬性獲得轉(zhuǎn)置的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這樣的參數(shù)可以修改原始對象本身。如果不想創(chuàng)建新對象,只需將其分配給原始對象本身即可。
df = df.T print(df) # A B C # X 0 1 2 # Y 3 4 5
為pandas.DataFrame中的每一列設(shè)置數(shù)據(jù)類型dtype。
如果所有列都具有相同的數(shù)據(jù)類型,則即使通過T或transpose()進(jìn)行轉(zhuǎn)置,該數(shù)據(jù)類型也將保持相同。
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
如果每一列都有不同的數(shù)據(jù)類型,則執(zhí)行類型轉(zhuǎn)換(廣播)。例如,如果作為轉(zhuǎn)置的結(jié)果生成了其中混合了整數(shù)int和浮點(diǎn)數(shù)float的列,則該列的數(shù)據(jù)類型變?yōu)閒loat。
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
即使再次轉(zhuǎn)置它也無法還原。需要應(yīng)用astype()來轉(zhuǎn)換數(shù)據(jù)類型。
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
如果所有列都具有相同的數(shù)據(jù)類型,則T或transpose()將返回視圖。
原始對象和視圖對象共享內(nèi)存,因此更改一個元素會更改另一個元素。
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
如果每一列的數(shù)據(jù)類型dtype不同,則T或transpose()將生成一個副本。轉(zhuǎn)置的對象保留一個新的存儲區(qū),因此,如果更改一個的值,則另一個將保持不變。
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
如果僅在后續(xù)過程中使用轉(zhuǎn)置的轉(zhuǎn)置,則不必?fù)?dān)心。以顯式創(chuàng)建副本。在transpose()中,當(dāng)參數(shù)copy設(shè)置為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()的參數(shù)副本默認(rèn)為False,如果可能,則生成視圖而不是副本。如上例所示,當(dāng)每列的數(shù)據(jù)類型dtype不同時,即使它是默認(rèn)值(copy = False),也會生成一個副本。不一定是視圖。
到此,相信大家對“Pandas.DataFrame行和列如何轉(zhuǎn)置”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。