python - 在 Pandas 中部分拆分字符串列

标签 python string pandas dataframe split

我在 python 中有以下数据框:

df = pd.DataFrame({'name': ['Vinay', 'Kushal', 'Aman', 'Saif'], 
                   'age': [22, 25, 24, 28], 
                    'occupation': ['A1|A2|A3', 'B1|B2|B3', 'C1|C2|C3', 'D1|D2|D3']})

请注意“职业”字段,其值由“|”分隔。

我想向数据框添加两个新列,比如说 new1 和 new2,其值分别为 A1 和 A2、B1 和 B2 等。

我尝试使用以下代码实现此目的:

df['new1'] = df['occupation'].str.split("|", n = 2,expand = False) 

得到的结果是:

    name    age occupation  new1
0   Vinay   22  A1|A2|A3    [A1, A2, A3]
1   Kushal  25  B1|B2|B3    [B1, B2, B3]
2   Aman    24  C1|C2|C3    [C1, C2, C3]
3   Saif    28  D1|D2|D3    [D1, D2, D3]

我不想在新字段中看到 A1、A2、A3 等。 预期输出:

        name    age occupation  new1 new2
    0   Vinay   22  A1|A2|A3    [A1] [A2]
    1   Kushal  25  B1|B2|B3    [B1] [B2]
    2   Aman    24  C1|C2|C3    [C1] [C2]
    3   Saif    28  D1|D2|D3    [D1] [D2]

请提出可能的解决方案。

最佳答案

为了提高性能,使用带有列表理解的str.split:

u = pd.DataFrame([
    x.split('|')[:2] for x in df.occupation], columns=['new1', 'new2'], index=df.index)
u

  new1 new2
0   A1   A2
1   B1   B2
2   C1   C2
3   D1   D2

pd.concat([df, u], axis=1)

     name  age occupation new1 new2
0   Vinay   22   A1|A2|A3   A1   A2
1  Kushal   25   B1|B2|B3   B1   B2
2    Aman   24   C1|C2|C3   C1   C2
3    Saif   28   D1|D2|D3   D1   D2

为什么列表理解在这里很快?您可以在 For loops with pandas - When should I care? 阅读更多内容.

关于python - 在 Pandas 中部分拆分字符串列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54131932/

相关文章:

java - 对象和字符串对象的区别?

python - 根据多元列值删除 Pandas 中的 DataFrame 行

python - 聚合具有相同日期的列(总和)

python - Pandas 'Int64' 类型合并后转换为 'object' 类型

python - Colab - 与谷歌驱动器连接的自动身份验证,每个笔记本的持久性

c - 将字符串转换为代码?

python - 使用 applescript 使用 Python 文件中定义的路径变量更改目录

c - 程序查找字符串中最长的单词

python - 计算几种条件下的 T/F 值

java - 如何使用 Jython 编写 Java 程序脚本