用pandas做项目已经快4个月了,pandas中的模块使用也到了即使不记得,但是知道功能的地步。如果知道了功能,那么实现功能也不过就是查阅笔记的事。
正当一个人容易傲娇的时候,就会有各种小麻烦找上来。比如说:
1.merge合并表格时,dtype类型不一样;
2.datetime的处理;
3.series,numpy,dataframe,list的转换;
4.object到int,float,datetime的转换;
5.eval处理数据时,数据类型转换;
6.等等等等。
每当我处理数据时忘记转换数据类型,就会导致即将出结果之时报错,于是乎前面跑了n久n久的代码全作废。
总结了一下这些小trouble,大概都是数据类型的问题!!!
听起来挺好笑,数据类型不就那几个类型吗?
可是,数据类型如果统一转换好,就不存在后续的麻烦了~~~~
下面介绍一些我在项目中总结的经验:
一、读取表格时的类型转换
方法一:
[In]:
print(data.dtypes)
data = data.convert_objects(convert_numeric=True) # 该方法会有一个FutureWarning
print(data.dtypes)
data['时间'] = pd.to_datetime(data['时间'])
print(data.dtypes)
[out]:
LICENCECD object
ORDER_DATE object
CIGCD object
ORDQTY object
SLQTY object
COMPCD object
dtype: object
LICENCECD int64
ORDER_DATE object
CIGCD float64
ORDQTY float64
SLQTY float64
COMPCD int64
dtype: object
LICENCECD int64
ORDER_DATE datetime64[ns]
CIGCD float64
ORDQTY float64
SLQTY float64
COMPCD int64
dtype: object
方法二:
[In]:
print(data.dtypes)
data = data.infer_objects(convert_numeric=True) # 该方法会有一个FutureWarning
print(data.dtypes)
data['时间'] = pd.to_datetime(data['时间'])
print(data.dtypes)
[out]:
LICENCECD object
ORDER_DATE object
CIGCD object
ORDQTY object
SLQTY object
COMPCD object
dtype: object
LICENCECD object
ORDER_DATE object
CIGCD object
ORDQTY object
SLQTY object
COMPCD object
dtype: object
LICENCECD object
ORDER_DATE datetime64[ns]
CIGCD object
ORDQTY object
SLQTY object
COMPCD object
dtype: object
许可证号 object
这个infer_objects无效
但是在昨天的实验中,电脑不知咋了,convert_objects不好用了,不能转换数据类型
而infer_objects突然就好用了,此前convert_objects用了好几个月
所以,多试试才知道哪个好用
注:此方法一convert_objects / infer_objects可以应对后面的:
merge,append(以object数据类型为主)等各种合并;
eval() ,groupby().sum() 等各种数学运算,
下期更精彩!欢迎交流和转载!