开发者

Python Pandas中数据类型查看与转换方法

开发者 https://www.devze.com 2025-04-24 09:17 出处:网络 作者: aiweker
目录1. 引言2. 数据类型查看方法2.1 查看Series/DataFrame的数据类型2.2 查看DataFrame内存使用情况3. 数据类型转换方法3.1 使用astype()进行类型转换3.2 转换为分类数据(category)3.3 日期时间转换3.4 使用pd.to_nu
目录
  • 1. 引言
  • 2. 数据类型查看方法
    • 2.1 查看Series/DataFrame的数据类型
    • 2.2 查看DataFrame内存使用情况
  • 3. 数据类型转换方法
    • 3.1 使用astype()进行类型转换
    • 3.2 转换为分类数据(category)
    • 3.3 日期时间转换
    • 3.4 使用pd.to_numeric()进行数值转换
  • 4. 特殊类型转换技巧
    • 4.1 使用infer_objects()自动推断类型
    • 4.2 使用convert_dtypes()转换到最佳类型
    • 4.3 自定义转换函数
  • 5. 类型转换的最佳实践
    • 6. 总结

      1. 引言

      在数据分析工作中,正确处理数据类型是确保分析结果准确性的基础。Pandas提供了丰富的数据类型系统以及灵活的类型转换方法。本文将详细介绍如何查看Pandas数据结构中的数据类型,以及如何进行有效的类型转换。

      2. 数据类型查看方法

      2.1 查看Series/DataFrame的数据类型

      import pandas as pd
      import numpy as np
      
      # 创建示例DataFrame
      data = {
          'Name': ['Alice', 'Bob', 'Charlie'],
          'Age': [25,javascript 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的数据类型
      print(df.dtypes)
      """
      Name           object
      Age             int64
      Salary        float64
      Join_Date      datetime64[ns]
      Is_Manager       bool
      dtype: object
      """
      
      # 查看单列的数据类型
      print(df['Age'].dtype)  # 输出: int64
      

      解释说明:

      • dtypes属性返回DataFrame每列的数据类型
      • 对于Series,使用dtype属性获取其数据类型
      • Pandas常见数据类型包括:object(字符串)、int64(整数)、float64(浮点数)、datetime64(日期时间)、bool(布尔值)等

      2.2 查看DataFrame内存使用情况

      # 查看各列内存使用量
      print(df.memory_usage())
      """
      Index        128
      Name          24
      Age           24
      Salary        24
      Join_Date     24
      Is_Manager     3
      dtype: int64
      """
      
      # 查看详细内存使用情况(deep=True会计算object类型的真实内存使用)
      print(df.memory_usage(deep=True))
      """
      Index        128
      Name         174
      Age           24
      Salary        24
      Join_Date     24
      Is_Manager     3
      dtype: int64
      """
      

      应用场景:处理大型数据集时优化内存使用。

      3. 数据类型转换方法

      3.1 使用astype()进javascript行类型转换

      # 将Age从int64转换为float64
      df['Age'] = df['Age'].astype('float64')
      print(df['Age'].dtype)  # 输出: float64
      
      # 将Salary从float64转换为int64(会截断小数部分)
      df['Salary'] = df['Salary'].astype('int64')
      print(df['Salary'])
      """
      0    50000
      1    60000
      2    70000
      Name: Salary, dtype: int64
      """
      
      # 将Is_Manager从bool转换为str
      df['Is_Manager'] = df['Is_Manager'].astype('str')
      print(df['Is_Manager'].dtype)  # 输出: object
      

      注意事项:

      • 转换到较小范围类型可能导致数据丢失(如float转int会截断小数)
      • 无法转换时会抛出异常(如将非数字字符串转为数值类型)

      3.2 转换为分类数据(category)

      # 将Name列转换为分类类型
      df['Name'] = df['Name'].astype('category')
      print(df['Name'].dtype)  # 输出: category
      
      # 查看分类的类别
      print(df['Name'].cat.categories)
      """
      Index(['Alice', 'Bob', 'Charlie'], dtype='object')
      """
      
      # 分类类型的内存节省效果
      print(f"原始内存: {df['Name'].memory_usage(deep=True)}")
      df['Name'] = df['Name'].astype('object')
      print(f"转换后内存: {df['Name'].memory_usage(deep=True)}")
      """
      原始内存: 174
      转换后内存: 180
      """
      

      应用场景:当列中重复值很多时,使用category类型可以显著节省内存。

      3.3 日期时间转换

      # 字符串转换为日期时间
      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(FjGuOLwzcdhttp://www.devze.comates)
      """
      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()进行数值转换

      # 创建包含数字字符串和缺失值的Series
      mixed_data = pd.Series(['1', '2.5', '3.0', 'four', None])
      
      # 安全转换为数值(无法转换的设为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
      """
      
      # 向下转换为最小可能类型
      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
      """
      

      优势:比astype()更安全,可以处理混合类型数据。

      4. 特殊类型转换技巧

      4.1 使用infer_objects()自动推断类型

      # 创建类型不明确的数据
      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()转换到最佳类型

      # 转换为支持pd.NA的最佳类型
      df_best = df.convert_dtypes()
      print(df_best.dtypes)
      """
      Name           string
      Aandroidge             Int64
      Salary          Int64
      Join_Date    datetime64[ns]
      Is_Manager      boolean
      Year             Int64
      Month            Int64
      dtype: object
      """
      

      说明:该方法会尝试转换为支持缺失值的最佳类型(如StringDtype、Int64等)。

      4.3 自定义转换函数

      # 使用apply进行自定义转换
      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. 类型转换的最佳实践

      转换前先检查:使用dtypes查看当前类型

      处理缺失值:转换前处理好缺失值,否则可能导致意外结果

      选择合适类型:根据数据特征选择最节省内存的类型

      使用安全转换:优先考虑pd.to_numeric()等安全转换方法

      测试转换结果:转换后验证数据是否符合预期

      分类数据优化:对低基数列使用category类型节省内存

      大文件处理:读取大文件时指定dtypes参数优化内存

      # 读取CSV时指定数据类型
      dtype_spec = {
          'user_id': 'int32',
          'product_id': 'category',
          'rating': 'float32'
      }
      # pd.read_csv('large_file.csv', dtype=dtype_spec)
      

      6. 总结

      1.数据类型查看:

      • dtypes查看DataFrame各列类型
      • dtype查看Series类型
      • memory_usage分析内存占用

      2.类型转换方法:

      • astype()基本类型转换
      • pd.to_datetime()日期时间转换
      • pd.to_numeric()安全数值转换
      • category类型节省内存
      • convert_dtypes()自动选择最佳类型

      3.高级技巧:

      • 自定义转换函数
      • 读取数据时指定类型
      • 使用分类数据优化性能

      正确理解和处理Pandas数据类型是数据预处理的关键步骤。合理的数据类型不仅能保证计算正确性,还能显著提高内存使用效率和计算速度。掌握这些类型查看与转换技巧,将使你的数据分析工作更加高效可靠。

      在实际工作中,建议:

      • 数据导入后首先检查各列数据类型
      • 根据分析需求转换到合适类型
      • 处理大型数据时特别注意类型对内存的影响
      • 建立数据类型检查的标准化流程

      到此这篇关于python Pandas中数据类型查看与转换方法的文章就介绍到这了,更多相关Pandas数据类型查看与转换内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号