python - Pandas 被最后一个分隔符分割

标签 python pandas dataframe split delimiter

我在具有不同输出的数据框中有以下列“

col1
MLB|NBA|NFL
MLB|NBA
NFL|NHL|NBA|MLB

我想使用 split 函数通过最后一个管道拆分列,总是这样:

col1           col2
MLB|NBA        NFL
MLB            NBA
NFL|NHL|NBA    MLB

最佳答案

使用Series.str.rsplit,限制拆分的次数。

df.col1.str.rsplit('|', 1, expand=True).rename(lambda x: f'col{x + 1}', axis=1)

如果上面的代码抛出一个 SyntaxError,这意味着你使用的 python 版本早于 3.6(真可耻!)。改用

df.col1.str.rsplit('|', 1, expand=True)\
  .rename(columns=lambda x: 'col{}'.format(x + 1))

          col1 col2
0      MLB|NBA  NFL
1          MLB  NBA
2  NFL|NHL|NBA  MLB

还有更快的循环 str.rsplit 等价物。

pd.DataFrame(
    [x.rsplit('|', 1) for x in df.col1.tolist()], 
    columns=['col1', 'col2']
) 
          col1 col2
0      MLB|NBA  NFL
1          MLB  NBA
2  NFL|NHL|NBA  MLB

P.S.,是的,第二种解决方案更快:

df = pd.concat([df] * 100000, ignore_index=True)

%timeit df.col1.str.rsplit('|', 1, expand=True)
%timeit pd.DataFrame([x.rsplit('|', 1) for x in df.col1.tolist()])

473 ms ± 13.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
128 ms ± 1.29 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

关于python - Pandas 被最后一个分隔符分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50993263/

相关文章:

Python 数据帧 : how can I return the number of occurrences in a column?

python - 计算 Pandas 数据框中多列中具有相同字符串值的总行数

python - 在python中计算给定距离的网格值

python - 如何在计算元素时向 pandas 数据框添加新列?

python - 展平包含元组的元组列表

python - 为什么我在Ubuntu16.04上安装不了python3.6-dev

pandas - Groupby 并将一组行除以另一组

python-3.x - 对多个列进行计数并在单独的列中列出计数并保留一列

python - 对多个 Postgres 模式的 Alembic 支持

Python Jupyter 笔记本 : Put two histogram subplots side by side in one figure