本章内容
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') # 转换成分类数据
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') # 尝试转换成数字,如果失败 默认报错
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精确匹配模式
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(数据源)
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 # 推断可能的类型
to_string 转换成字符串,
to_period 转换成周期,
to_xarray 转换成 xarray,
to_dict 转换成 字典,
to_json 保存成json