在开始数据分析前,有时需要为数据分配好合适的类型,这样才能 够高效地处理数据
# 对所有字段指定统一类型
data= pd.DataFrame(data, dtype='float32')
# 对每个字段分别指定
data = pd.read_excel(data.xlsx, dtype={'name': 'string', 'score': 'int32'})
# 按大体类型推定
m = ['1', 2, 3]
s = pd.to_numeric(s) # 转成数字
pd.to_datetime(m) # 转成时间
pd.to_timedelta(m) # 转成时间差
pd.to_datetime(m, errors='coerce') # 错误处理
pd.to_numeric(m, errors='ignore')
pd.to_numeric(m errors='coerce').fillna(0) # 兜底填充
pd.to_datetime(data[['year', 'month', 'day']]) # 组合成日期
注意 : pd.to_datetime() 很重要
pd.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=None, box=True, format=None, exact=True, unit=None, infer_datetime_format=False, origin='unix', cache=True)
常用参数解析:
arg:int,float,str,datetime,list,tuple,1-d数组,Series,DataFrame / dict-like,要转换为日期时间的对象
errors:{'ignore','raise','coerce'},默认为'raise'
如果为“ raise”,则无效的解析将引发异常
如果为“coerce”,则将无效解析设置为NaT
如果为“ ignore”,则无效的解析将返回输入
format:str,格式,default None,解析时间的strftime,eg : “%d /%m /%Y”。
详情https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
一般都使用 astype()操作数据转换。
data.index.astype('int64') # 索引类型转换
data.astype('int32') # 所有数据转换为int32
data.astype({'列名1': 'int32'}) # 指定字段转指定类型
data.astype('int64', copy=False) # 不与原数据关联
data['name'].astype('object') #name列转换为 object 类型
data["状态"].astype("bool")
s.astype('datetime64[ns]') #转化为时间类型
当数据的格式不具备转换为目标类型的条件时,需要先对数据进行 处理。例如 百分数 转换为小数需要先去除 %
# 将"89.3%"这样的文本转为浮点数
data.rate.apply(lambda x: x.replace('%', '')).astype('float')/10