字符串的split方法中,使用expand=True是什么意思?有人能解释一下吗?

8
all_data['Title']= all_data['Name'].str.split(', ', expand=True)[1].str.split('.', expand=True)[0]

有人能解释一下这行代码的含义吗?尤其是涉及到expand=True[1][0]


2
这不是通常的字符串分割方法,而是all_data['Name'].str返回的特定对象方法。我相信你正在使用Pandas数据框架,你需要查看Pandas文档以了解其对象定义的方法和参数。 - jasonharper
2个回答

8
如果你使用Pandas,很可能你也知道Jupyter Notebooks。 因此,为了简便和易读性,让我们使用Notebook类似的格式来补充你发布的代码及一些附加信息:
(this markdown is here to override an error in the answer window interpreter)

```lang-python
    import pandas as pd
    
    raw_name = ['Bob, Mr. Ross', 'Alice, Mrs. Algae', 'Larry, Mr. lemon', 'John, Mr. Johnson']
    all_data = pd.DataFrame({'Name': raw_name})
    
    # This the OP's line
    all_data['Title'] = all_data['Name'].str.split(', ', expand=True)[1].str.split('.', expand=True)[0]
    
    all_data
名称 头衔
0 Bob, Ross 先生 先生
1 Alice, Algae 女士 女士
2 Larry, Lemon 先生 先生
3 John, Johnson 先生 先生

expand=True 参数将渲染一组字符串列。因此,在第一次拆分后,您可以再次应用另一个 str.split 方法,因为第一次拆分已经将字符串数据帧渲染成列。如果使用常规的拆分(或 expand=False),会比较复杂,因为它会呈现一系列列表。

下面有代码示例:

    all_data['Name'].str.split(', ', expand=False) # or no expand at all
0
0 [鲍勃,罗斯先生]
1 [艾丽斯,藻类夫人]
2 [拉里,莱蒙先生]
3 [约翰,约翰逊先生]
    all_data['Name'].str.split(', ', expand=True) 
0 1
0 鲍勃 罗斯先生
1 爱丽丝 艾尔吉夫人
2 拉里 柠檬先生
3 约翰 约翰逊先生
    all_data['Name'].str.split(', ', expand=True)[1].str.split('.', expand=False)
0
0 [Ross先生]
1 [Algae女士]
2 [Lemon先生]
3 [Johnson先生]
    all_data['Name'].str.split(', ', expand=True)[1].str.split('.', expand=True)
0 1
0 先生 Ross
1 夫人 Algae
2 先生 Lemon
3 先生 Johnson

参考: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.split.html


不断弹出的错误是:“您的帖子似乎包含格式不正确的代码。请使用代码工具栏按钮或CTRL + K键盘快捷键缩进所有代码4个空格。有关更多编辑帮助,请单击[?] 工具栏图标。” - Alejandro QA

2

请看这里:pandas.Series.str.split

将分割后的字符串扩展为单独的列。

如果为True,则返回扩展维度的DataFrame / MultiIndex。

如果为False,则返回包含字符串列表的Series / Index。

s = pd.Series(
    [
        "this is a regular sentence",
    ]
)    
s.str.split(expand=True)

0 1 2 3 4
这是一个普通的句子

(此文本为一个IT技术示例,展示了一行代码和相应的注释。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接