gpt4 book ai didi

python - Pandas 替换为默认值

转载 作者:太空狗 更新时间:2023-10-29 22:08:59 26 4
gpt4 key购买 nike

我有一个 pandas 数据框,我想有条件地替换某个列。

例如:

   col

0 Mr
1 Miss
2 Mr
3 Mrs
4 Col.

我想将它们映射为

{'Mr': 0, 'Mrs': 1, 'Miss': 2}

如果字典中现在还有其他可用的标题,那么我希望它们的默认值为 3

上面的例子变成了

   col

0 0
1 2
2 0
3 1
4 3

我可以在不使用正则表达式的情况下使用 pandas.replace() 执行此操作吗?

最佳答案

您可以使用 map而不是 replace,因为更快,然后 fillna通过 3 并通过 astype 转换为 int :

df['col'] = df.col.map({'Mr': 0, 'Mrs': 1, 'Miss': 2}).fillna(3).astype(int)

print (df)
col
0 0
1 2
2 0
3 1
4 3

另一种解决方案 numpy.where和条件 isin :

d = {'Mr': 0, 'Mrs': 1, 'Miss': 2}
df['col'] = np.where(df.col.isin(d.keys()), df.col.map(d), 3).astype(int)
print (df)
col
0 0
1 2
2 0
3 1
4 3

解决方案 replace :

d = {'Mr': 0, 'Mrs': 1, 'Miss': 2}
df['col'] = np.where(df.col.isin(d.keys()), df.col.replace(d), 3)
print (df)
col
0 0
1 2
2 0
3 1
4 3

时间:

df = pd.concat([df]*10000).reset_index(drop=True)

d = {'Mr': 0, 'Mrs': 1, 'Miss': 2}
df['col0'] = df.col.map(d).fillna(3).astype(int)
df['col1'] = np.where(df.col.isin(d.keys()), df.col.replace(d), 3)
df['col2'] = np.where(df.col.isin(d.keys()), df.col.map(d), 3).astype(int)
print (df)

In [447]: %timeit df['col0'] = df.col.map(d).fillna(3).astype(int)
100 loops, best of 3: 4.93 ms per loop

In [448]: %timeit df['col1'] = np.where(df.col.isin(d.keys()), df.col.replace(d), 3)
100 loops, best of 3: 14.3 ms per loop

In [449]: %timeit df['col2'] = np.where(df.col.isin(d.keys()), df.col.map(d), 3).astype(int)
100 loops, best of 3: 7.68 ms per loop

In [450]: %timeit df['col3'] = df.col.map(lambda L: d.get(L, 3))
10 loops, best of 3: 36.2 ms per loop

关于python - Pandas 替换为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39104730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com