自学内容网 自学内容网

Pandas中astype() 方法

Pandas 中,astype() 方法用于将 DataFrame 或 Series 的数据类型(dtype)转换为指定的数据类型。它是数据类型转换的常用方法,支持将列转换为多种类型,比如整数、浮点数、字符串、布尔值等。


astype() 的语法

DataFrame.astype(dtype, copy=True, errors='raise')
参数说明
  1. dtype(必需参数):

    • 目标数据类型,可以是单一类型(如 'int''float'),也可以是字典形式指定列类型(如 {列名: 类型})。
    • 支持的类型包括:
      • 标准类型:int, float, str, bool, 等。
      • Numpy 类型:numpy.int32, numpy.float64 等。
      • Pandas 类型:category, datetime64 等。
    • 示例:
      • 单列转换:astype('int')
      • 多列转换:astype({'col1': 'int', 'col2': 'float'})
  2. copy(可选参数,默认为 True):

    • 是否返回数据的副本。如果为 False,则尽量避免复制原始数据。
  3. errors(可选参数,默认为 'raise'):

    • 'raise':如果转换失败,会抛出错误。
    • 'ignore':如果转换失败,不会报错,原数据保持不变。

常见使用场景

1. 转换单列的数据类型

将单个列转换为指定数据类型。

import pandas as pd

# 示例数据
data = {'A': ['1', '2', '3'], 'B': ['4.5', '5.5', '6.5']}
df = pd.DataFrame(data)

# 转换列 A 为整数
df['A'] = df['A'].astype(int)

# 转换列 B 为浮点数
df['B'] = df['B'].astype(float)

print(df.dtypes)

输出:

A      int64
B    float64
dtype: object

2. 转换多列的数据类型

可以通过字典同时为多列指定不同的数据类型。

df = pd.DataFrame({
    'A': ['1', '2', '3'],
    'B': ['True', 'False', 'True']
})

# 同时转换多列
df = df.astype({'A': 'int', 'B': 'bool'})
print(df.dtypes)

输出:

A     int64
B    bool
dtype: object

3. 转换为分类数据(category

category 类型对于具有重复值的列可以显著节省内存。

df = pd.DataFrame({'A': ['apple', 'banana', 'apple', 'orange']})

# 转换为分类类型
df['A'] = df['A'].astype('category')
print(df.dtypes)

# 查看分类信息
print(df['A'].cat.categories)

输出:

A    category
dtype: object
Index(['apple', 'banana', 'orange'], dtype='object')

4. 处理转换错误

当某列的值不能成功转换时,可以通过 errors='ignore' 避免抛出错误。

df = pd.DataFrame({'A': ['1', '2', 'three']})

# 转换时忽略错误
df['A'] = df['A'].astype(int, errors='ignore')
print(df)

输出:

       A
0      1
1      2
2  three

5. 转换为日期时间(datetime64

astype() 也可用于转换为日期时间类型,但更推荐使用 pd.to_datetime()

df = pd.DataFrame({'A': ['2024-01-01', '2024-02-01']})

# 转换为日期类型
df['A'] = df['A'].astype('datetime64[ns]')
print(df.dtypes)

输出:

A    datetime64[ns]
dtype: object

6. 转换为布尔类型

可以将 0、1 或字符串转换为布尔值。

df = pd.DataFrame({'A': [0, 1, 0, 1]})

# 转换为布尔类型
df['A'] = df['A'].astype(bool)
print(df.dtypes)

输出:

A    bool
dtype: object

注意事项

  1. 转换失败时的错误处理:

    • 默认情况下(errors='raise'),如果某些值不能成功转换,会抛出错误。
    • 如果希望忽略错误,可以设置 errors='ignore'
  2. 丢失精度:

    • 将浮点数转换为整数时,可能会丢失精度。例如:
      df['A'] = df['A'].astype(int)
      
      如果列 A 包含小数,将抛出错误。
  3. 避免数据拷贝:

    • 如果只需要修改原数据类型而不创建副本,可以设置 copy=False,但需谨慎操作,防止意外修改原数据。
  4. 处理空值(NaN):

    • 如果列包含空值,将数据类型转换为整数可能失败,因为空值默认是浮点类型。

总结

  • astype() 是 Pandas 中用于类型转换的重要方法,适用于大多数类型的转换需求。
  • 通过字典形式可以一次性为多个列指定类型。
  • 使用 errors='ignore' 可以避免因为数据问题导致的转换失败。
  • 对于复杂的类型转换(如日期时间),建议结合 pd.to_datetime() 等专用方法使用。

原文地址:https://blog.csdn.net/u013172930/article/details/143723145

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!