我想你也可以只選擇DataFrame.replace
。
df.replace(' ', '_', regex=True)
輸出
Person_1 Person_2 Person_3
0 John_Smith Jane_Smith Mark_Smith
1 Harry_Jones Mary_Jones Susan_Jones
從一些粗略的基準測試,它可預見好像piRSquared的NumPy的解決方案確實是最快的,對於這個小樣本至少,其次是DataFrame.replace
。
%timeit df.values[:] = np.core.defchararray.replace(df.values.astype(str), ' ', '_')
10000 loops, best of 3: 78.4 µs per loop
%timeit df.replace(' ', '_', regex=True)
1000 loops, best of 3: 932 µs per loop
%timeit df.stack().str.replace(' ', '_').unstack()
100 loops, best of 3: 2.29 ms per loop
有趣然而,似乎piRSquared的大熊貓解決方案適用多比DataFrame.replace
更好地與較大DataFrames,甚至優於NumPy的解決方案。
>>> df = pd.DataFrame([['John Smith', 'Jane Smith', 'Mark Smith']*10000,
['Harry Jones', 'Mary Jones', 'Susan Jones']*10000])
%timeit df.values[:] = np.core.defchararray.replace(df.values.astype(str), ' ', '_')
10 loops, best of 3: 181 ms per loop
%timeit df.replace(' ', '_', regex=True)
1 loop, best of 3: 4.14 s per loop
%timeit df.stack().str.replace(' ', '_').unstack()
10 loops, best of 3: 99.2 ms per loop