pandas中如何将列中数据进行转换,如4.6k => 4600?
源数据 | 原类型 | 期望值 |
---|---|---|
4.6k | object | 4600 |
2k | object | 2000 |
5.9k | object | 5900 |
尝试过使用一下方法
- pandas.apply()
def f(x):
if('k' in str(x)):
return float(x[:-1]) * 1000
return x
df['views'] =df[['view']].apply(f)
错误提示
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-123-a88a6b015fcb> in <module>()
3 return float(x[:-1]) * 1000
4 return x
----> 5 df['views'] =df[['view']].apply(f)
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in apply(self, func, axis, broadcast, raw, reduce, args, **kwds)
4260 f, axis,
4261 reduce=reduce,
-> 4262 ignore_failures=ignore_failures)
4263 else:
4264 return self._apply_broadcast(f, axis)
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in _apply_standard(self, func, axis, ignore_failures, reduce)
4356 try:
4357 for i, v in enumerate(series_gen):
-> 4358 results[i] = func(v)
4359 keys.append(v.name)
4360 except Exception as e:
<ipython-input-123-a88a6b015fcb> in f(x)
1 def f(x):
2 if('k' in str(x)):
----> 3 return float(x[:-1]) * 1000
4 return x
5 df['views'] =df[['view']].apply(f)
~/anaconda3/lib/python3.6/site-packages/pandas/core/series.py in wrapper(self)
95 return converter(self.iloc[0])
96 raise TypeError("cannot convert the series to "
---> 97 "{0}".format(str(converter)))
98
99 return wrapper
TypeError: ("cannot convert the series to <class 'float'>", 'occurred at index view')
- map()
def f(x):
if('k' in str(x)):
return int(x[:-1]) * 1000
return x
df['views'] = map(f,df['view'])
结果:
求大神帮忙指定下
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
map函数返回的是一个生成器,你要把这个生成器初始化后再赋值给df:
如果不行你再试试
反正就是这个意思,你可以先在ipython中运行出来看看能不能赋值,再进程序跑
你也可以把数据发给我,我帮你写好,因为没具体的数据,我也不知道会出现啥情况2333333
apply函数我没用过,学习了,我研究下,我用pandas用的也不多
多嘴一句:别迭代DataFrame,一般比较慢,迭代numpy的ndarry会快很多,原来写程序发现的坑