真是心累啊,这种鬼问题困扰了快一天,百度各种搜不到答案,全是在说read_csv加encoding gbk2312或者gbk的,逗我。。。。。。
最后求助谷歌爸爸才解决,某度司个妈吧,就知道收推广费,推荐都是什么垃圾,醉了 - -
问题
数据如下
我需要把age栏的中文全部去掉,替换成数字,0,1,2等等
直接对Series进行replace("15岁以下",0)是失败的,因为和解码有关,python不认识你的中文字符。
解决办法
很简单,在"15岁以下"前面加一个u,即u"15岁以下",这样python就知道你是替换的是中文,从而对应解码
user = pd.read_csv("input/JData_User.csv",encoding="gbk")
user.info(null_counts = True)
可以看到,现在age的类型是object
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 103616 entries, 0 to 103615
Data columns (total 5 columns):
user_id 103616 non-null int64
age 103616 non-null object
sex 103616 non-null int64
user_lv_cd 103616 non-null int64
user_reg_dt 103616 non-null object
dtypes: int64(3), object(2)
memory usage: 4.0+ MB
对中文进行替换,使用list,进行批量替换,然后将age的类型转换为int
user['age'].replace(["-1",u"15岁以下",u"16-25岁",u"26-35岁",u"36-45岁",u"46-55岁",u"56岁以上"] , [-1,0,1,2,3,4,5] , inplace=True)
user['age']=user['age'].astype(int)
user.info(null_counts=True)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 103616 entries, 0 to 103615
Data columns (total 5 columns):
user_id 103616 non-null int64
age 103616 non-null int64
sex 103616 non-null int64
user_lv_cd 103616 non-null int64
user_reg_dt 103616 non-null object
dtypes: int64(4), object(1)
memory usage: 4.0+ MB
查看数据,转换成功