Pandas.DataFrame行和列的轉(zhuǎn)置的實(shí)現(xiàn)
如果要交換(轉(zhuǎn)置)pandas.DataFrame的行和列,使用T屬性或transpose()方法。
這兩種方法都不會(huì)保留原始對(duì)象不變,也不會(huì)返回交換了行和列(轉(zhuǎn)置)的新對(duì)象。請(qǐng)注意,根據(jù)每一列的數(shù)據(jù)類型dtype,將生成視圖而不是副本,并且更改原始對(duì)象和轉(zhuǎn)置對(duì)象之一的值將更改另一個(gè)視圖。
pandas.DataFrame.T
可以使用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
pandas.DataFrame.transpose()
transpose()方法類似。
print(df.transpose()) # A B C # X 0 1 2 # Y 3 4 5
修改原始對(duì)象本身
沒(méi)有像inplace這樣的參數(shù)可以修改原始對(duì)象本身。如果不想創(chuàng)建新對(duì)象,只需將其分配給原始對(duì)象本身即可。
df = df.T print(df) # A B C # X 0 1 2 # Y 3 4 5
當(dāng)進(jìn)行類型轉(zhuǎn)換(廣播)時(shí)
為pandas.DataFrame中的每一列設(shè)置數(shù)據(jù)類型dtype。
如果所有列都具有相同的數(shù)據(jù)類型,則即使通過(guò)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)置它也無(wú)法還原。需要應(yīng)用astype()來(lái)轉(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的字符串是對(duì)象類型。
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
視圖和復(fù)制
如果所有列都具有相同的數(shù)據(jù)類型,則T或transpose()將返回視圖。
原始對(duì)象和視圖對(duì)象共享內(nèi)存,因此更改一個(gè)元素會(huì)更改另一個(gè)元素。
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()將生成一個(gè)副本。轉(zhuǎn)置的對(duì)象保留一個(gè)新的存儲(chǔ)區(qū),因此,如果更改一個(gè)的值,則另一個(gè)將保持不變。
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ù)過(guò)程中使用轉(zhuǎn)置的轉(zhuǎn)置,則不必?fù)?dān)心。以顯式創(chuàng)建副本。在transpose()中,當(dāng)參數(shù)copy設(shè)置為True時(shí),將生成一個(gè)副本。
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不同時(shí),即使它是默認(rèn)值(copy = False),也會(huì)生成一個(gè)副本。不一定是視圖。
到此這篇關(guān)于Pandas.DataFrame行和列的轉(zhuǎn)置的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Pandas.DataFrame行列轉(zhuǎn)置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中format()函數(shù)的簡(jiǎn)單使用教程
python中format函數(shù)用于字符串的格式化,接下來(lái)通過(guò)本文給大家介紹python中format()函數(shù)的簡(jiǎn)單使用教程,一起看看吧2018-03-03python 調(diào)用HBase的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇python 調(diào)用HBase的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12在keras中獲取某一層上的feature map實(shí)例
今天小編就為大家分享一篇在keras中獲取某一層上的feature map實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01Python如何將兩個(gè)Excel文件按相同字段合并到一起
文章介紹了如何使用Pandas工具將兩個(gè)關(guān)聯(lián)的Excel文件合并成一個(gè),首先創(chuàng)建兩個(gè)Excel文件test1和test2,然后使用Pandas進(jìn)行合并,最后顯示新創(chuàng)建的Excel文件2025-02-02python調(diào)用pymssql包操作SqlServer數(shù)據(jù)庫(kù)的實(shí)現(xiàn)
本文主要介紹了python調(diào)用pymssql包操作SqlServer數(shù)據(jù)庫(kù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06