在 Python DataFrame 中拆分字符串

Posted

技术标签:

【中文标题】在 Python DataFrame 中拆分字符串【英文标题】:Splitting a string in a Python DataFrame 【发布时间】:2015-12-02 05:20:11 【问题描述】:

我在 Python 中有一个 DataFrame,其中有一列名称(例如 Joseph Haydn、Wolfgang Amadeus Mozart、Antonio Salieri 等)。

我想获得一个包含姓氏的新列:海顿、莫扎特、萨列里等等。

我知道如何拆分字符串,但找不到将其应用于系列或数据框列的方法。

【问题讨论】:

column.str.split。添加一些示例代码,您可能会得到答案。 【参考方案1】:

如果你有:

import pandas
data = pandas.DataFrame("composers": [ 
    "Joseph Haydn", 
    "Wolfgang Amadeus Mozart", 
    "Antonio Salieri",
    "Eumir Deodato"])

假设您只想要名字(而不是像 Amadeus 这样的中间名):

data.composers.str.split('\s+').str[0]

将给予:

0      Joseph
1    Wolfgang
2     Antonio
3       Eumir
dtype: object

您可以将其分配给同一数据框中的新列:

data['firstnames'] = data.composers.str.split('\s+').str[0]

姓氏是:

data.composers.str.split('\s+').str[-1]

给出:

0      Haydn
1     Mozart
2    Salieri
3    Deodato
dtype: object

(另请参阅Python Pandas: selecting element in array column 以访问“数组”列中的元素)

对于除姓之外的所有名称,您可以将" ".join(..) 应用于除每行的最后一个元素 ([:-1]) 之外的所有元素:

data.composers.str.split('\s+').str[:-1].apply(lambda parts: " ".join(parts))

给出:

0              Joseph
1    Wolfgang Amadeus
2             Antonio
3               Eumir
dtype: object

【讨论】:

谢谢安德烈。我几乎达到了相同的解决方案,但你的更优雅。无论如何,我对在“data.composers.str.split('\s+').str[-1]”中双重使用“str”很感兴趣。仅凭逻辑永远无法推断出这一点。还是谢谢。 我反复得出这个解决方案,例如通过谷歌搜索'pandas dataframe strings',我找到了pandas.pydata.org/pandas-docs/stable/text.html,在那里我搜索了split(顺便说一句,当你执行help(data.composers)(在变量数据如上所述定义之后)时,你还会找到一个关于拆分的示例。第二部分(访问其条目本身就是列表的列的元素)我在链接的答案***.com/questions/26069235/…【参考方案2】:

试试这个来解决你的问题:

import pandas as pd
df = pd.DataFrame(
    'composers':
        [ 
            'Joseph Haydn', 
            'Wolfgang Amadeus Mozart', 
            'Antonio Salieri',
            'Eumir Deodato',
        ]
    
)

df['lastname'] = df['composers'].str.split(n = 0, expand = False).str[1]

您现在可以找到DataFrame,如下所示。

composers   lastname
0   Joseph Haydn    Haydn
1   Wolfgang Amadeus Mozart Amadeus Mozart
2   Antonio Salieri Salieri
3   Eumir Deodato   Deodato

【讨论】:

以上是关于在 Python DataFrame 中拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

在DataFrame中多次拆分字符串

在 Spark 上使用 Scala 在 Dataframe 中拆分字符串

将字符串拆分附加到 Pandas DataFrame [关闭]

Pandas使用split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数设置expand参数将拆分结果列表内容转化为多列dataframe并添加到原dataframe中

R语言将dataframe的某个字符串列拆分为多列实战

python使用pandas后如何利用DataFrame拆分列