(python)pandas中如何将列中数据进行转换,如46k => 4600?_其他语言_编程问答

(python)pandas中如何将列中数据进行转换,如46k => 4600?

来源:互联网  时间:2018/1/29 12:19:37

关于网友提出的“ (python)pandas中如何将列中数据进行转换,如46k => 4600?”问题疑问,本网通过在网上对“ (python)pandas中如何将列中数据进行转换,如46k => 4600?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: (python)pandas中如何将列中数据进行转换,如46k => 4600?
描述:

源数据原类型期望值
4.6kobject4600
2kobject2000
5.9kobject5900

尝试过使用一下方法

  1. 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')
  1. map()
def f(x):
    if('k' in str(x)):
        return int(x[:-1]) * 1000
    return x
df['views'] = map(f,df['view'])

结果:

求大神帮忙指定下


解决方案1:

map函数返回的是一个生成器,你要把这个生成器初始化后再赋值给df:

def f(x):
    if('k' in str(x)):
        return int(x[:-1]) * 1000
    return x
# 初始化为list再赋值
df['views'] = list(map(f,df['view']))

如果不行你再试试

df['views'] = np.array(list(map(f,df['view'])))

反正就是这个意思,你可以先在ipython中运行出来看看能不能赋值,再进程序跑
你也可以把数据发给我,我帮你写好,因为没具体的数据,我也不知道会出现啥情况2333333

apply函数我没用过,学习了,我研究下,我用pandas用的也不多
多嘴一句:别迭代DataFrame,一般比较慢,迭代numpy的ndarry会快很多,原来写程序发现的坑

上一篇(python)Postman 接口测试按照api文档put 和 delete 请求失败 返回状态码405
下一篇:没有了
明星图片
相关文章
《 (python)pandas中如何将列中数据进行转换,如46k => 4600?》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)