欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?Pandas中數(shù)據(jù)類型查看與轉(zhuǎn)換方法

 更新時間:2025年04月23日 09:02:19   作者:aiweker  
Pandas提供了豐富的數(shù)據(jù)類型系統(tǒng)以及靈活的類型轉(zhuǎn)換方法,下面小編就來詳細介紹一下如何查看Pandas數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)類型和進行有效的類型轉(zhuǎn)換吧

1. 引言

在數(shù)據(jù)分析工作中,正確處理數(shù)據(jù)類型是確保分析結(jié)果準確性的基礎(chǔ)。Pandas提供了豐富的數(shù)據(jù)類型系統(tǒng)以及靈活的類型轉(zhuǎn)換方法。本文將詳細介紹如何查看Pandas數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)類型,以及如何進行有效的類型轉(zhuǎn)換。

2. 數(shù)據(jù)類型查看方法

2.1 查看Series/DataFrame的數(shù)據(jù)類型

import pandas as pd
import numpy as np

# 創(chuàng)建示例DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Salary': [50000.0, 60000.5, 70000.0],
    'Join_Date': pd.to_datetime(['2020-01-15', '2019-05-20', '2021-11-10']),
    'Is_Manager': [True, False, True]
}
df = pd.DataFrame(data)

# 查看整個DataFrame的數(shù)據(jù)類型
print(df.dtypes)
"""
Name           object
Age             int64
Salary        float64
Join_Date      datetime64[ns]
Is_Manager       bool
dtype: object
"""

# 查看單列的數(shù)據(jù)類型
print(df['Age'].dtype)  # 輸出: int64

解釋說明:

  • dtypes屬性返回DataFrame每列的數(shù)據(jù)類型
  • 對于Series,使用dtype屬性獲取其數(shù)據(jù)類型
  • Pandas常見數(shù)據(jù)類型包括:object(字符串)、int64(整數(shù))、float64(浮點數(shù))、datetime64(日期時間)、bool(布爾值)等

2.2 查看DataFrame內(nèi)存使用情況

# 查看各列內(nèi)存使用量
print(df.memory_usage())
"""
Index        128
Name          24
Age           24
Salary        24
Join_Date     24
Is_Manager     3
dtype: int64
"""

# 查看詳細內(nèi)存使用情況(deep=True會計算object類型的真實內(nèi)存使用)
print(df.memory_usage(deep=True))
"""
Index        128
Name         174
Age           24
Salary        24
Join_Date     24
Is_Manager     3
dtype: int64
"""

應(yīng)用場景:處理大型數(shù)據(jù)集時優(yōu)化內(nèi)存使用。

3. 數(shù)據(jù)類型轉(zhuǎn)換方法

3.1 使用astype()進行類型轉(zhuǎn)換

# 將Age從int64轉(zhuǎn)換為float64
df['Age'] = df['Age'].astype('float64')
print(df['Age'].dtype)  # 輸出: float64

# 將Salary從float64轉(zhuǎn)換為int64(會截斷小數(shù)部分)
df['Salary'] = df['Salary'].astype('int64')
print(df['Salary'])
"""
0    50000
1    60000
2    70000
Name: Salary, dtype: int64
"""

# 將Is_Manager從bool轉(zhuǎn)換為str
df['Is_Manager'] = df['Is_Manager'].astype('str')
print(df['Is_Manager'].dtype)  # 輸出: object

注意事項:

  • 轉(zhuǎn)換到較小范圍類型可能導致數(shù)據(jù)丟失(如float轉(zhuǎn)int會截斷小數(shù))
  • 無法轉(zhuǎn)換時會拋出異常(如將非數(shù)字字符串轉(zhuǎn)為數(shù)值類型)

3.2 轉(zhuǎn)換為分類數(shù)據(jù)(category)

# 將Name列轉(zhuǎn)換為分類類型
df['Name'] = df['Name'].astype('category')
print(df['Name'].dtype)  # 輸出: category

# 查看分類的類別
print(df['Name'].cat.categories)
"""
Index(['Alice', 'Bob', 'Charlie'], dtype='object')
"""

# 分類類型的內(nèi)存節(jié)省效果
print(f"原始內(nèi)存: {df['Name'].memory_usage(deep=True)}")
df['Name'] = df['Name'].astype('object')
print(f"轉(zhuǎn)換后內(nèi)存: {df['Name'].memory_usage(deep=True)}")
"""
原始內(nèi)存: 174
轉(zhuǎn)換后內(nèi)存: 180
"""

應(yīng)用場景:當列中重復(fù)值很多時,使用category類型可以顯著節(jié)省內(nèi)存。

3.3 日期時間轉(zhuǎn)換

# 字符串轉(zhuǎn)換為日期時間
date_str = pd.Series(['2023-01-01', '2023-02-15', '2023-03-20'])
dates = pd.to_datetime(date_str)
print(dates.dtype)  # 輸出: datetime64[ns]

# 處理多種日期格式
mixed_dates = pd.Series(['01-01-2023', '2023/02/15', '15-March-2023'])
dates = pd.to_datetime(mixed_dates)
print(dates)
"""
0   2023-01-01
1   2023-02-15
2   2023-03-15
dtype: datetime64[ns]
"""

# 提取日期組成部分
df['Year'] = df['Join_Date'].dt.year
df['Month'] = df['Join_Date'].dt.month
print(df[['Join_Date', 'Year', 'Month']])
"""
   Join_Date  Year  Month
0 2020-01-15  2020      1
1 2019-05-20  2019      5
2 2021-11-10  2021     11
"""

3.4 使用pd.to_numeric()進行數(shù)值轉(zhuǎn)換

# 創(chuàng)建包含數(shù)字字符串和缺失值的Series
mixed_data = pd.Series(['1', '2.5', '3.0', 'four', None])

# 安全轉(zhuǎn)換為數(shù)值(無法轉(zhuǎn)換的設(shè)為NaN)
numeric_data = pd.to_numeric(mixed_data, errors='coerce')
print(numeric_data)
"""
0    1.0
1    2.5
2    3.0
3    NaN
4    NaN
dtype: float64
"""

# 向下轉(zhuǎn)換為最小可能類型
numeric_data = pd.to_numeric(mixed_data, errors='coerce', downcast='integer')
print(numeric_data)
"""
0    1.0
1    2.5
2    3.0
3    NaN
4    NaN
dtype: float32
"""

優(yōu)勢:比astype()更安全,可以處理混合類型數(shù)據(jù)。

4. 特殊類型轉(zhuǎn)換技巧

4.1 使用infer_objects()自動推斷類型

# 創(chuàng)建類型不明確的數(shù)據(jù)
df_mixed = pd.DataFrame({
    'A': [1, 2, 3],
    'B': ['4', '5', '6'],
    'C': [True, False, True]
})

# 自動推斷更合適的類型
df_inferred = df_mixed.infer_objects()
print(df_inferred.dtypes)
"""
A      int64
B     object
C       bool
dtype: object
"""

4.2 使用convert_dtypes()轉(zhuǎn)換到最佳類型

# 轉(zhuǎn)換為支持pd.NA的最佳類型
df_best = df.convert_dtypes()
print(df_best.dtypes)
"""
Name           string
Age             Int64
Salary          Int64
Join_Date    datetime64[ns]
Is_Manager      boolean
Year             Int64
Month            Int64
dtype: object
"""

說明:該方法會嘗試轉(zhuǎn)換為支持缺失值的最佳類型(如StringDtype、Int64等)。

4.3 自定義轉(zhuǎn)換函數(shù)

# 使用apply進行自定義轉(zhuǎn)換
def convert_salary(salary):
    if salary > 60000:
        return 'High'
    elif salary > 50000:
        return 'Medium'
    else:
        return 'Low'

df['Salary_Level'] = df['Salary'].apply(convert_salary)
print(df[['Salary', 'Salary_Level']])
"""
   Salary Salary_Level
0   50000          Low
1   60000       Medium
2   70000         High
"""

5. 類型轉(zhuǎn)換的最佳實踐

轉(zhuǎn)換前先檢查:使用dtypes查看當前類型

處理缺失值:轉(zhuǎn)換前處理好缺失值,否則可能導致意外結(jié)果

選擇合適類型:根據(jù)數(shù)據(jù)特征選擇最節(jié)省內(nèi)存的類型

使用安全轉(zhuǎn)換:優(yōu)先考慮pd.to_numeric()等安全轉(zhuǎn)換方法

測試轉(zhuǎn)換結(jié)果:轉(zhuǎn)換后驗證數(shù)據(jù)是否符合預(yù)期

分類數(shù)據(jù)優(yōu)化:對低基數(shù)列使用category類型節(jié)省內(nèi)存

大文件處理:讀取大文件時指定dtypes參數(shù)優(yōu)化內(nèi)存

# 讀取CSV時指定數(shù)據(jù)類型
dtype_spec = {
    'user_id': 'int32',
    'product_id': 'category',
    'rating': 'float32'
}
# pd.read_csv('large_file.csv', dtype=dtype_spec)

6. 總結(jié)

1.數(shù)據(jù)類型查看:

  • dtypes查看DataFrame各列類型
  • dtype查看Series類型
  • memory_usage分析內(nèi)存占用

2.類型轉(zhuǎn)換方法:

  • astype()基本類型轉(zhuǎn)換
  • pd.to_datetime()日期時間轉(zhuǎn)換
  • pd.to_numeric()安全數(shù)值轉(zhuǎn)換
  • category類型節(jié)省內(nèi)存
  • convert_dtypes()自動選擇最佳類型

3.高級技巧:

  • 自定義轉(zhuǎn)換函數(shù)
  • 讀取數(shù)據(jù)時指定類型
  • 使用分類數(shù)據(jù)優(yōu)化性能

正確理解和處理Pandas數(shù)據(jù)類型是數(shù)據(jù)預(yù)處理的關(guān)鍵步驟。合理的數(shù)據(jù)類型不僅能保證計算正確性,還能顯著提高內(nèi)存使用效率和計算速度。掌握這些類型查看與轉(zhuǎn)換技巧,將使你的數(shù)據(jù)分析工作更加高效可靠。

在實際工作中,建議:

  • 數(shù)據(jù)導入后首先檢查各列數(shù)據(jù)類型
  • 根據(jù)分析需求轉(zhuǎn)換到合適類型
  • 處理大型數(shù)據(jù)時特別注意類型對內(nèi)存的影響
  • 建立數(shù)據(jù)類型檢查的標準化流程

到此這篇關(guān)于Python Pandas中數(shù)據(jù)類型查看與轉(zhuǎn)換方法的文章就介紹到這了,更多相關(guān)Pandas數(shù)據(jù)類型查看與轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Anaconda安裝時默認python版本改成其他版本的兩種方式

    Anaconda安裝時默認python版本改成其他版本的兩種方式

    這篇文章主要給大家介紹了關(guān)于Anaconda安裝時默認python版本改成其他版本的兩種方式,anaconda是一個非常好用的python發(fā)行版本,其中包含了大部分常用的庫,需要的朋友可以參考下
    2023-10-10
  • Python ConfigParser模塊的使用示例

    Python ConfigParser模塊的使用示例

    這篇文章主要介紹了Python ConfigParser模塊的使用示例,幫助大家更好的理解和學習Python ConfigParser模塊的用法,感興趣的朋友可以了解下
    2020-10-10
  • 詳解Python中的List 2

    詳解Python中的List 2

    這篇文章主要為大家介紹了Python中的List,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 在python tkinter中Canvas實現(xiàn)進度條顯示的方法

    在python tkinter中Canvas實現(xiàn)進度條顯示的方法

    今天小編就為大家分享一篇在python tkinter中Canvas實現(xiàn)進度條顯示的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python產(chǎn)生batch數(shù)據(jù)的操作

    Python產(chǎn)生batch數(shù)據(jù)的操作

    這篇文章主要介紹了Python產(chǎn)生batch數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Matlab實現(xiàn)圖像邊緣檢測

    Matlab實現(xiàn)圖像邊緣檢測

    這篇文章主要為大家詳細介紹了Matlab實現(xiàn)圖像邊緣檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Python學習之名字,作用域,名字空間(下)

    Python學習之名字,作用域,名字空間(下)

    這篇文章主要介紹了Python學習之名字,作用域,名字空間,緊接上一篇文章內(nèi)容展開全文,需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-05-05
  • Python xml、字典、json、類四種數(shù)據(jù)類型如何實現(xiàn)互相轉(zhuǎn)換

    Python xml、字典、json、類四種數(shù)據(jù)類型如何實現(xiàn)互相轉(zhuǎn)換

    這篇文章主要介紹了Python xml、字典、json、類四種數(shù)據(jù)類型如何實現(xiàn)互相轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • python實現(xiàn)彈跳小球

    python實現(xiàn)彈跳小球

    這篇文章主要為大家詳細介紹了python實現(xiàn)彈跳小球,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Python裝飾器基礎(chǔ)詳解

    Python裝飾器基礎(chǔ)詳解

    裝飾器(decorator)是一種高級Python語法。裝飾器可以對一個函數(shù)、方法或者類進行加工。接下來通過本文給大家介紹python裝飾器基礎(chǔ),對python裝飾器相關(guān)知識感興趣的朋友一起學習吧
    2016-03-03

最新評論