我有一个带有python列的数据框:
df
columnA
Apple Banana
Orange Citron Pineapple
如何根据空格保留子字符串的顺序?结果应该是:
columnA
Banana Apple
Pineapple Citron Orange
现在,我仅使用:
df['columnA'] = df['columnA'].replace(r'(\s+).(\s+).(\s+)',r'\3\2\1',regex=True)
但这仅在我知道子字符串的数量的情况下才有效,而我不事先知道。
答案 0 :(得分:2)
对于该任务,我将使用列表理解,并避免使用str
访问器
df['new'] = [' '.join(s.split()[::-1]) for s in df['columnA']]
df = pd.concat([df]*10000)
%timeit [' '.join(s.split()[::-1]) for s in df.col]
100 loops, best of 3: 12.9 ms per loop
%timeit df.col.str.split().apply(lambda x: ' '.join(x[::-1]))
10 loops, best of 3: 25.3 ms per loop
%timeit df.col.str.split().str[::-1].agg(' '.join)
10 loops, best of 3: 27.4 ms per loop
%timeit df.col.str.split().apply(reversed).apply(' '.join)
10 loop, best of 3: 28.7 ms per loop
答案 1 :(得分:1)
您需要的三个步骤是:
第一步和第三步可以使用str.split和join完成,因此 您可以这样做:
drivers = {
"firefox": webdriver.Firefox,
"ie": webdriver.Ie,
"opera": webdriver.Opera,
"phantomjs": webdriver.PhantomJS,
"edge": webdriver.Edge,
}
drivers["internet explorer"] = drivers["ie"]
drivers["ff"] = drivers["firefox"]
if remote_address is None:
if browser in ("chrome", "Chrome"):
mobile_emulation = {"deviceName": "Galaxy S5"}
option = webdriver.ChromeOptions()
option.add_experimental_option('w3c', False)
option.add_experimental_option('mobileEmulation', mobile_emulation)
dr = webdriver.Chrome(chrome_options=option)
else:
dr = drivers[browser]()
输出
df.A.str.split().apply(lambda x: ' '.join(x[::-1]))
另一种替代方法是使用reversed:
0 Banana Apple
1 Pineapple Citron Orange
Name: A, dtype: object