pandas数据框的其中一列包含0,'a','b'等值。 此列被解析为字符串。现在我想将它转换为整数以获得0,1,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'