首页 > 后端开发 > Python教程 > Python 中的 astype() 函数是什么

Python 中的 astype() 函数是什么

Mary-Kate Olsen
发布: 2025-01-09 06:51:46
原创
227 人浏览过

What is astype() function in Python

理解 Python 中的 astype()

astype() 函数是 Python 中的一个强大方法,主要用于 pandas 库,用于将 DataFrame 或 Series 中的列或数据集转换为特定数据类型。它也可在 NumPy 中用于将数组元素转换为不同类型。


astype() 的基本用法

astype() 函数用于将 pandas 对象(如 Series 或 DataFrame)或 NumPy 数组的数据类型转换为另一种类型。

pandas 的语法:

DataFrame.astype(dtype, copy=True, errors='raise')
登录后复制
登录后复制
登录后复制

NumPy 语法:

ndarray.astype(dtype, order='K', casting='unsafe', subok=True, copy=True)
登录后复制
登录后复制

关键参数

1.数据类型

要将数据转换为的目标数据类型。可以使用以下方式指定:

  • 单一类型(例如 float、int、str)。
  • 将列名映射到类型的字典(对于 pandas DataFrames)。

2.复制(pandas 和 NumPy)

  • 默认:True
  • 用途:是否返回原始数据的副本(如果为True)或就地修改(如果为False)。

3.错误(仅限熊猫)

  • 选项
    • 'raise'(默认):如果转换失败则引发错误。
    • 'ignore':默默地忽略错误。

4.顺序(仅限 NumPy)

  • 控制输出数组的内存布局。选项:
    • 'C':C-连续顺序。
    • 'F':Fortran 连续顺序。
    • 'A':如果输入是 Fortran 连续的,则使用 Fortran 顺序,否则使用 C 顺序。
    • 'K':匹配输入数组的布局。

5.铸造(仅限 NumPy)

  • 控制投射行为:
    • 'no':不允许转换。
    • 'equiv':仅允许字节顺序更改。
    • “安全”:只允许保留值的强制转换。
    • 'same_kind':仅允许安全强制转换或某种类型内的强制转换(例如,float -> int)。
    • '不安全':允许任何数据转换。

6. subok(仅限 NumPy)

  • 如果为 True,则传递子类;如果为 False,则返回的数组将是基类数组。

示例

1. pandas 的基本转换

import pandas as pd

# Example DataFrame
df = pd.DataFrame({'A': ['1', '2', '3'], 'B': [1.5, 2.5, 3.5]})

# Convert column 'A' to integer
df['A'] = df['A'].astype(int)
print(df.dtypes)
登录后复制
登录后复制

输出:

A     int64
B    float64
dtype: object
登录后复制
登录后复制

2.多列的字典映射

# Convert multiple columns
df = df.astype({'A': float, 'B': int})
print(df.dtypes)
登录后复制
登录后复制

输出:

DataFrame.astype(dtype, copy=True, errors='raise')
登录后复制
登录后复制
登录后复制

3.使用错误='忽略'

ndarray.astype(dtype, order='K', casting='unsafe', subok=True, copy=True)
登录后复制
登录后复制

输出:

import pandas as pd

# Example DataFrame
df = pd.DataFrame({'A': ['1', '2', '3'], 'B': [1.5, 2.5, 3.5]})

# Convert column 'A' to integer
df['A'] = df['A'].astype(int)
print(df.dtypes)
登录后复制
登录后复制
  • “two”的转换失败,但不会引发错误。

4.在 NumPy 中使用 astype()

A     int64
B    float64
dtype: object
登录后复制
登录后复制

输出:

# Convert multiple columns
df = df.astype({'A': float, 'B': int})
print(df.dtypes)
登录后复制
登录后复制

5.在 NumPy 中使用casting='safe'进行铸造

A    float64
B      int64
dtype: object
登录后复制

输出:

df = pd.DataFrame({'A': ['1', 'two', '3'], 'B': [1.5, 2.5, 3.5]})

# Attempt conversion with errors='ignore'
df['A'] = df['A'].astype(int, errors='ignore')
print(df)
登录后复制

6.处理 pandas 中的非数字类型

      A    B
0     1  1.5
1   two  2.5
2     3  3.5
登录后复制

输出:

import numpy as np

# Example array
arr = np.array([1.1, 2.2, 3.3])

# Convert to integer
arr_int = arr.astype(int)
print(arr_int)
登录后复制

7.使用 astype() 进行内存优化

代码:

[1 2 3]
登录后复制

输出:

优化前(原始内存使用情况):

arr = np.array([1.1, 2.2, 3.3])

# Attempt an unsafe conversion
try:
    arr_str = arr.astype(str, casting='safe')
except TypeError as e:
    print(e)
登录后复制

优化后(优化内存使用):

Cannot cast array data from dtype('float64') to dtype('<U32') according to the rule 'safe'
登录后复制

说明:

  • 原始内存使用情况:

    • A 列作为 int64 使用 24 个字节(每个元素 8 个字节 × 3 个元素)。
    • B 列作为 float64 使用 24 个字节(每个元素 8 个字节 × 3 个元素)。
  • 优化内存使用:

    • A 列作为 int8 使用 3 个字节(每个元素 1 个字节 × 3 个元素)。
    • B 列作为 float32 使用 12 个字节(每个元素 4 个字节 × 3 个元素)。

使用较小的数据类型可以显着减少内存使用量,尤其是在处理大型数据集时。

常见陷阱

  1. 无效转换:转换不兼容的类型(例如,当存在非数字值时,将字符串转换为数字类型)。
df = pd.DataFrame({'A': ['2022-01-01', '2023-01-01'], 'B': ['True', 'False']})

# Convert to datetime and boolean
df['A'] = pd.to_datetime(df['A'])
df['B'] = df['B'].astype(bool)
print(df.dtypes)
登录后复制
  1. Errors='ignore'静默错误

    :谨慎使用,因为它可能会静默地无法转换。
  2. 精度损失

    :从高精度类型(例如 float64)转换为低精度类型(例如 float32)。

高级示例

1.复杂数据类型转换

A    datetime64[ns]
B             bool
dtype: object
登录后复制

输出:

import pandas as pd

# Original DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [1.1, 2.2, 3.3]})
print("Original memory usage:")
print(df.memory_usage())

# Downcast numerical types
df['A'] = df['A'].astype('int8')
df['B'] = df['B'].astype('float32')

print("Optimized memory usage:")
print(df.memory_usage())
登录后复制

2.在 NumPy 中使用 astype() 来处理结构化数组

Index    128
A         24
B         24
dtype: int64
登录后复制

输出:

DataFrame.astype(dtype, copy=True, errors='raise')
登录后复制
登录后复制
登录后复制

总结

astype() 函数是 pandas 和 NumPy 中数据类型转换的多功能工具。它允许对转换行为、内存优化和错误处理进行细粒度控制。正确使用其参数(例如 pandas 中的错误和 NumPy 中的转换)可确保稳健且高效的数据类型转换。

以上是Python 中的 astype() 函数是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板