網站首頁 編程語言 正文
如果要交換(轉置)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),也會生成一個副本。不一定是視圖。
原文鏈接:https://blog.csdn.net/qq_18351157/article/details/105931547
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-06-30 Unity多屏幕設置的具體方案_C#教程
- 2022-10-24 通過5個例子讓你學會Pandas中的字符串過濾_python
- 2022-09-26 設計模式類別,設計模式遵循的7個原則,工廠模式(靜態工廠,工廠方法,抽象工廠),7種單例模式
- 2022-06-10 阿里云日志服務日志過濾器配置_服務器其它
- 2022-06-27 ABP引入SqlSugar框架的簡單版創建使用_實用技巧
- 2022-07-29 C++超詳細講解字符串類_C 語言
- 2022-10-04 混合棧跳轉導致Flutter頁面事件卡死問題解決_IOS
- 2022-02-19 Android~日志工具Log
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支