熊猫列中单词的逆序

时间:2019-10-02 14:16:58

标签: python regex pandas

我有一个带有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)

但这仅在我知道子字符串的数量的情况下才有效,而我不事先知道。

2 个答案:

答案 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)

您需要的三个步骤是:

  1. 分割字符串
  2. 反转字符串
  3. 加入字符串

第一步和第三步可以使用str.splitjoin完成,因此 您可以这样做:

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