DataFrame替换中文value

2017-03-28  本文已影响933人  等流星的牧羊人

真是心累啊,这种鬼问题困扰了快一天,百度各种搜不到答案,全是在说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

查看数据,转换成功


上一篇 下一篇

猜你喜欢

热点阅读