Python Pandas中更改列的数据类型
Pandas中进行数据类型转换有二种基本方法:
使用astype()函数进行强制类型转换
使用Pandas提供的函数如to_numeric()、to_datetime()
1.使用astype()函数进行强制类型转换
1.1转float类型
df['金额'].astype('float')
1.2转int类型
df['金额'].astype('int')
1.3转bool
df['状态'].astype('bool')
1.4字符串日期转datetime
df['单据日期'] = pd.to_datetime(df['单据日期'])
df['year'] = df['单据日期'].dt.strftime('%Y')
df['month'] = df['单据日期'].dt.strftime('%m')
1.5数字转字符串
df['金额'].astype(str)
2.使用to_numeric()
import pandas as pd
import numpy as np
s = pd.Series(['apple', '1.0', '2','2019-01-02',1, False,None,pd.Timestamp('2018-01-05')])
# to_numeric是在object,时间格式中间做转换,然后再使用astype做numeric类型的内部转换
pd.to_numeric(s, errors='raise') # 遇到非数字字符串类型报错,bool类型报错,时间类型转换为int
pd.to_numeric(s, errors='ignore') # 只对数字字符串转换,其他类型一律不转换,包含时间类型
pd.to_numeric(s, errors='coerce') # 将时间字符串和bool类型转换为数字,其他均转换为NaN
# downcast 可以进一步转化为int或者float
pd.to_numeric(s) # 默认float64类型
pd.to_numeric(s, downcast='signed') # 转换为整型
# astype中的error没有`coerce`选项,所以只适合`numeric`内部类型的转换,比如将int32转换为int64,int32转换为float32
# 而不适合在object,时间格式之间做转换,
s.astype('int32',errors='raise')
s.astype('int32',errors='ignore') # 对object无效,astype只能对numeric类型生效
3.缺失值处理
可以看到NaN类型在比较的是不相等的,原因是numpy.NaN是一种特殊的numpy.float64,如果想比较NaN是否相同,需要将其转换为该类型自己定义的特殊值(注意不能转换为None,None在Series里不能比较,而单独的值才能比较
import pandas as pd
import numpy as np
s = pd.Series(['apple', '1.0', '2','2019-01-02',1, False,None,pd.Timestamp('2018-01-05')])
# 缺失值的比较 np.NaN == np.NaN返回是False
a = pd.to_numeric(s, errors='coerce') # 将时间字符串和bool类型转换为数字,其他均转换为NaN
b = pd.to_numeric(s, errors='coerce') # 将时间字符串和bool类型转换为数字,其他均转换为NaN
a==b
a[a==np.NaN] # 索引不到np.NaN
a[a.isnull()] = None # 能索引到,但是不能赋值为None
a[a.isna()] =None # 能索引到,但是不能赋值为None
a = a.where(a.notnull(), None) # 可以转换
b = b.where(b.notnull(), None)
a == b # 但是Series里的None不能比较,返回False,这个坑太大了,在Python中None == None 返回是Ture
a[a.isnull()] = -1000 # 可以转换
a[a.isna()] = -1000 # 可以转换
a = a.where(a.notnull(), -10000) # 可以转换
b = b.where(b.notnull(), -10000) # 可以转换
a==b # 可以判断
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示