欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

12、pandas数据类型转换

时间:2023-05-26


本章内容

Pandas所支持的数据类型转换数据类型的思路astype()函数pd.to_numeric函数pd.to_datetime函数pd.to_timedelta函数convert_dtypes函数、infer_objects函数其他转换类型函数 1、 Pandas所支持的数据类型: floatintbooldatetime64[ns]datetime64[ns, tz]timedelta[ns]categoryobject
默认的数据类型是int64,float64. 2、转换数据类型的思路 使用astype()方法强制转化dtype自定义一个数据转换函数函数使用pandas内置的tonumeric()和todatetime()导入数据时转换数据类型 3、astype()函数

df.astype(dtype, copy:bool=True, errors:str=‘raise’)

参数:-dtype:类型或者类型列表-copy:默认True-errors :转换失败时是否报错,取值:'raise', 'ignore',默认raise,报错

示例:

df.dtypes #获取所有列的类型df.astype(dtype={'工资':'float','时间':'string'},errors='ignore' # 多列转换,dict 映射df['dept 1'].astype('int',errors='ignore') # 转换为失败,默认报错,也可以忽略 转换失败的错误并保持原样df.工资.astype(str) # 转换为 object素的原样df.工资.astype(pd.StringDtype()) # 转换为 stringdf.工资.astype('string') # 转换为 stringdf.时间.astype('datetime64[ns]') # 转换为 datetime,注意unitdf.奖金.astype('float32') # 转换为 float32 df.奖金.astype('float') # 转换为 floatdf.dept.astype('category') # 转换成分类数据

4、pd.to_numeric函数

pd.to_numeric(arg, errors=‘raise’, downcast=None)

参数:-errors:转换失败时是否报错,默认raise,报错-dowmcast:指定downcast 目标类型

pd.to_numeric(df.工资)pd.to_numeric(df.工资,downcast='float') # 指定downcast 目标类型,具体参数值选取参考官方文档pd.to_numeric(df.company,errors='coerce') # 如果失败,强制将转换失败的转换为nanpd.to_numeric(df.company,errors='ignore') # 如果失败,忽略并保持原数据不变pd.to_numeric(df.dept,errors='raise') # 尝试转换成数字,如果失败 默认报错

5、pd.to_datetime函数

pd.to_datetime(arg, errors:str=‘raise’, dayfirst:bool=False, yearfirst:bool=False, utc:None, format:None, exact:True, unit:None, infer_datetime_format:bool=False, origin=‘unix’, cache:bool=True) ]

参数:-errors: 转换失败时是否报错,默认raise,报错-dayfirst:布尔类型,默认false-yearfirst:布尔类型,默认false-utc: bool, default None-format: 格式,format='%y/%m/%d'-exact: 布尔类型,默认true-unit:时间单位-infer_datetime_format: 转换加速,布尔类型-origin:origin 指定时间的起点类型-cache: 布尔类型,默认true

示例:

pd.to_datetime(df.时间.astype(str)) # 简单的,将转换成str的时间列再转换回时间类型pd.to_datetime(df.salary,errors='ignore') # 转换失败,保留原数据pd.to_datetime(df.salary,errors='coerce') # 转换失败,强制转换成natpd.to_datetime(df.salary,errors='raise') # 转换失败默认报错pd.to_datetime(460386857.5,unit='ms',origin='unix') # 将时间偏移数量转换成时间。unit 指定时间单位 origin 指定 时间的起点类型pd.to_datetime(460386857,unit='ns',origin='unix') # 将时间偏移数量转换成时间。unit 指定时间单位 origin 指定时间的起点类型pd.to_datetime('10/11/12',format='%y/%m/%d') # 设置时间格式字符串pd.to_datetime('10/11/12',format='%d/%m/%y') # 设置时间格式字符串pd.to_datetime(df.时间,infer_datetime_format=True) # 推断第一个时间字符串的格式,尝试转换加速pd.to_datetime('10/11/12',yearfirst=True) # 指定第一个数字(10)为年pd.to_datetime('10/11/12',dayfirst=True) # 指定第一个数字(10)为日pd.to_datetime('10/11/12 00:00+5',utc=False) # utc。注意对比这几个的区别,带时区 与 不带时区pd.to_datetime('10/11/12 00:00+5',utc=True) # utc 化pd.to_datetime('10/11/12 05:00+5',utc=True) # utc 化pd.to_datetime('10/11/12',utc=True) # utc 化pd.to_datetime('10/11/12 05:00+5',format='%m/%d',exact=False) # format非精确匹配模式pd.to_datetime('10/11/12 05:00+5',format='%y/%m/%d',exact=False) # format非精确匹配模式pd.to_datetime('10/11/12 00:00+5',format='%y/%m/%d',exact=True) # format精确匹配模式

6、pd.to_timedelta函数

pd.to_timedelta(arg, unit=None, errors=‘raise’)

示例:

pd.to_timedelta('1 days 05:30:30') # 转换成timedeltapd.to_timedelta('1 days ') # 转换成timedeltapd.to_timedelta('1 days 05:30:30',unit='H') # 转换成timedelta。str不能使用unit(来自错误提示)pd.to_timedelta(np.arange(10),unit='H') # 转换成timedelta。10个,间隔一个小时pd.to_timedelta(arg=['1 days 05:30:30',np.nan,'1 days']) # 转换成timedelta。可以使用list作为arg(数据源)

7、convert_dtypes 函数、infer_objects 函数

df.convert_dtypes(infer_objects:bool=True, convert_string:bool=True, convert_integer:bool=True, convert_boolean:bool=True)

参数:-infer_objects=True, -convert_string=True,-convert_integer=True,-convert_boolean=True, -convert_floating=True

df.convert_dtypes() # 转换成可能的类型df.convert_dtypes().dtypesdf.convert_dtypes(convert_string=False)

infer_objects 尝试推断列的最可能的类型

df.infer_objects().dtypes # 推断可能的类型

8、其他转换类型函数

to_string 转换成字符串,
to_period 转换成周期,
to_xarray 转换成 xarray,
to_dict 转换成 字典,
to_json 保存成json

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。