numpy库是否包含?

2024-04-25 03:58:28 发布

您现在位置:Python中文网/ 问答频道 /正文

像这样:

这样做有效:

df.C = np.where((df.C.values == 'yes')), 'no', df.C.values)

但是如果这个词是这一行的一部分,而不是整行,那么就需要熊猫的“包含”之类的词。你知道吗

df.C = np.where((df.C.values.contains('ye')), 'no', df.C.values)

但这行不通。你知道吗

我想用numpy,因为速度快。你知道吗


Tags: nonumpydfnpwhere速度yesvalues
1条回答
网友
1楼 · 发布于 2024-04-25 03:58:28

使用^{}

df.C = np.where(df.C.str.contains('ye').values, 'no', df.C.values)

如果性能很重要:

df.C = np.where(['ye' in x for x in df.C], 'no', df.C.values)

df.loc[['ye' in x for x in df.C], 'C'] = 'no'

性能

df = pd.DataFrame({'C':['aa ss ye','a s d','fff', 'yeye']})

#[40000 rows x 1 columns]
df = pd.concat([df] * 10000, ignore_index=True)
print (df)

In [13]: %timeit df.C = np.where(df.C.str.contains('ye').values, 'no', df.C.values)
21.6 ms ± 294 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [14]: %timeit df.C = np.where(['ye' in x for x in df.C], 'no', df.C.values)
3.29 ms ± 49.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [15]: %timeit df.loc[['ye' in x for x in df.C], 'C'] = 'no'
5.26 ms ± 105 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

pandas中的字符串操作很慢,所以最快的是使用列表理解和in。实际数据中的计时应该是不同的,因为这取决于匹配值的数量和DataFrame的长度。你知道吗

相关问题 更多 >