Pandas类型转换astype()的实现与注意事项

白榆
白榆
发布时间:2026-10-15| 5人浏览过
原创

本文详细介绍Pandas中astype()函数的用法,涵盖基础类型转换、处理非标准数据格式(如含百分号的字符串)以及加载时指定类型。通过示例解析如何安全地将数值、字符串及时间类型进行转换,并指出转换失败时的处理策略,帮助开发者高效进行数据清洗。

在Python的Pandas库中,不同数据类型之间存在明确的对应关系,理解这些关系是进行数据操作的基础。

  • 若原始数据质量较高且纯净,通常可以直接将其转换为数值类型。
  • astype()函数主要适用于两种场景:一是将数字转换为纯字符串,二是将仅包含数字的字符串转换为数值类型。需要注意的是,如果字符串中包含非数字字符,直接使用该函数进行转换将会失败。
  • 当遇到包含非数字字符的复杂字符串时,需要结合其他方法进行处理,例如编写自定义函数来清洗数据后再进行转换。

astype()是Pandas中最常用且通用的数据类型转换工具,适用于大多数常规转换需求。

import pandas as pd
 
df = pd.DataFrame([['liver','E',89,21,24,64],
                   ['Arry','C',36,37,37,57],
                   ['Ack','A',57,60,18,84],
                   ['Eorge','C',93,96,71,78],
                   ['Oah','D',65,49,61,86]
                  ], 
                   columns = ['name','team','Q1','Q2','Q3','Q4'])
 
res = df.dtypes
 
df.Q1.astype('int32').dtypes # dtype('int32')
df.astype({'Q1':'int32','Q2':'int32'}).dtypes

以下是具体的运行结果展示。

查看DataFrame对象df。

查看转换后的结果res。

扩展知识

# 以下是一些使用示例:
df.index.astype('int64') # 索引类型转换
df.astype('int32') # 所有数据转换为int32
df.astype({'col1':'int32'}) # 指定字段转指定类型
s.astype('int64')
s.astype('int64',copy = False) # 不与原数据关联
df['name'].astype('object')
data['Q4'].astype('float')
s.astype('datatime64[ns]') # 转为时间类型
data['状态'].astype('bool')

关于数据类型的更多细节。

使用df.dtypes属性可以返回DataFrame中每个字段的数据类型,以及整个DataFrame的类型信息。

如果处理的是Series对象,则需要使用s.dtype属性来获取其数据类型。

import pandas as pd
 
df = pd.DataFrame([['liver','E',89,21,24,64],
                   ['Arry','C',36,37,37,57],
                   ['Ack','A',57,60,18,84],
                   ['Eorge','C',93,96,71,78],
                   ['Oah','D',65,49,61,86]
                  ], 
                   columns = ['name','team','Q1','Q2','Q3','Q4'])
df.dtypes
 
s = pd.Series(['One','Two','Three'])
s.dtype

以下是查看数据类型的结果展示。

查看DataFrame对象df。

查看Series对象s。

当数据格式不符合目标类型的转换条件时,必须先对数据进行预处理或清洗。

例如,字符串“89.3%”无法直接转换为数字,必须先去除百分号。

# 将"89.3%"这样的文本转为浮点数
data.rate.apply(lambda x:x.replace('%','')).astype('float')/100

在加载数据阶段,就可以直接指定各列的数据类型,以提高效率。

import pandas as pd
 
# 对所有字段指定统一类型
df = pd.DataFrame(data, dtype = 'float32')
# 对每个字段分别指定
df = pd.read_excel(data, dtype = {'team':'string','Q1':'int32'})

至此,关于Pandas类型转换astype()的实现介绍完毕。如需了解更多相关内容,建议搜索本站过往文章或继续阅读后续文章,感谢支持。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。