本章内容
默认的数据类型是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