如何将字符串序列转换为整数

时间:2015-10-02 21:03:30

标签: python pandas dataframe

pandas数据框的其中一列包含0,'a','b'等值。 此列被解析为字符串。现在我想将它转换为整数以获得0,1,2。我该怎么做?

2 个答案:

答案 0 :(得分:0)

保持简单和愚蠢,因为看起来非常简单尝试这种方法:

if value == 'a':
   x = 1
if value == 'b':
   x = 2
else:
   x = 0

答案 1 :(得分:0)

以下是一些初步数据:

df = pd.DataFrame({'col': [0, 'a', 'b', 'a']})

>>> df
  col
0   0
1   a
2   b
3   a

您可以创建您要替换的项目词典:

d = {'a': 1, 'b': 2}

然后,将get应用于该列,如果原始值不在字典中,则返回原始值:

df['col'] = df.col.apply(lambda x: d.get(x, x))
>>> df
df
   col
0    0
1    1
2    2
3    1

@EdChum如果系列中包含的所有唯一项都在字典键中,则.map(d)的速度是其快五倍。但是,任何缺失值都显示为NaN。在字典上使用lambda函数与get似乎具有几乎相同的性能。

%%timeit df = pd.DataFrame({'col': [0, 'a', 'b', 'a'] * 100000})
df['col'] = df.col.map(d)

10 loops, best of 3: 33.3 ms per loop

>>> df.head()
   col
0  NaN
1    1
2    2
3    1
4  NaN
%%timeit df = pd.DataFrame({'col': [0, 'a', 'b', 'a'] * 100000})
df['col'] = df.col.apply(lambda x: d.get(x, x))

10 loops, best of 3: 188 ms per loop

%%timeit df = pd.DataFrame({'col': [0, 'a', 'b', 'a'] * 100000})
df['col'] = df.col.map(lambda x: d.get(x, x))

10 loops, best of 3: 188 ms per loop

In [64]: %timeit df['col'] = df.col.map(d)
10 loops, best of 3: 36.1 ms per loop

这是疯狂的部分。我之前测试了几行代码并得到了不同的结果:

%%timeit df = pd.DataFrame({'col': [0, 'a', 'b', 'a'] * 100000})
df['col'] = df.col.map(d)

10 loops, best of 3: 33.4 ms per loop

>>> df.head()
   col
0    0
1    1
2    2
3    1
4    0

>>> pd.__version__
'0.16.2'