12、pandas 数据类型转换


本章内容

  1. Pandas所支持的数据类型
  2. 转换数据类型的思路
  3. astype()函数
  4. pd.to_numeric函数
  5. pd.to_datetime函数
  6. pd.to_timedelta函数
  7. convert_dtypes函数、infer_objects函数
  8. 其他转换类型函数

1、 Pandas所支持的数据类型:

  1. float
  2. int
  3. bool
  4. datetime64[ns]
  5. datetime64[ns, tz]
  6. timedelta[ns]
  7. category
  8. object
    默认的数据类型是int64,float64.

2、转换数据类型的思路

  1. 使用astype()方法强制转化dtype
  2. 自定义一个数据转换函数函数
  3. 使用pandas内置的tonumeric()和todatetime()
  4. 导入数据时转换数据类型

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())   # 转换为 string
df.工资.astype('string') 		   # 转换为 string
df.时间.astype('datetime64[ns]')   # 转换为 datetime,注意unit
df.奖金.astype('float32') 			# 转换为 float32 
df.奖金.astype('float') 			# 转换为 float
df.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') # 如果失败,强制将转换失败的转换为nan
pd.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') # 转换失败,强制转换成nat
pd.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') # 转换成timedelta
pd.to_timedelta('1 days ') # 转换成timedelta
pd.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().dtypes
df.convert_dtypes(convert_string=False) 

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

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

8、其他转换类型函数

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

来源:lghpy01

物联沃分享整理
物联沃-IOTWORD物联网 » 12、pandas 数据类型转换

发表评论