【问题标题】:How do I convert all strings (like "Fault") and into a unique float?如何将所有字符串(如“Fault”)转换为唯一的浮点数?
【发布时间】:2017-07-16 11:19:11
【问题描述】:

我有一个 DataFrame,其中包含 intfloatobject(带字符的字符串)项。我希望每个独特的对象都有一个独特的浮动,就像这样-

Exhuast
Fault
Probation
Exhaust
Fault
Motor

1.
2.
3.
1.
2.
4.

另外,它是否适用于所有列,还是我必须逐列执行?

最后一个问题,它还会将所有int 转换为float 吗?

【问题讨论】:

标签: python pandas numpy keras


【解决方案1】:

正如 Jon 所说,您可以使用 Series.factorize

(s.factorize()[0]+1).astype('float')

要在整个 DataFrame 上按列执行此操作,只需使用 apply

演示

>>> s = pd.Series(['Exhaust', 'Fault', 'Probation', 5, int,
                   'Exhaust', int, 'Fault', 'Motor'])

>>> s
0          Exhaust
1            Fault
2        Probation
3                5
4    <class 'int'>
5          Exhaust
6    <class 'int'>
7            Fault
8            Motor
dtype: object

>>> (s.factorize()[0]+1).astype('float')
array([ 1.,  2.,  3.,  4.,  5.,  1.,  5.,  2.,  6.])

一个 NumPy 解决方案可能是使用 np.uniquereturn_inverse 关键字 arg,

(np.unique(s, return_inverse=True)[1]+1).astype('float')

但是,从一些粗略的基准测试来看,Pandas 解决方案可能会更快。

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2018-02-15
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 2014-06-16
相关资源
最近更新 更多