Pandas类型转换astype()的实现与注意事项
本文详细介绍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()的实现介绍完毕。如需了解更多相关内容,建议搜索本站过往文章或继续阅读后续文章,感谢支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









