如何拆分包含字符串的列

Posted

技术标签:

【中文标题】如何拆分包含字符串的列【英文标题】:How to split a column with contains a string 【发布时间】:2020-02-20 21:32:36 【问题描述】:

如果_ 出现,我有一个数据框需要拆分列

Name = [('Hello'),
      ('Spider'),
      ('Captain'),
      ('Superman'),
       ('Hello_1'),
       ('Superman_1')]
dfName = pd.DataFrame(Name, columns=['Name'])

我的出局

    Name
0   Hello
1   Spider
2   Captain
3   Superman
4   Hello_1
5   Superman_1

预期结果

df1

    Name      
0   Hello
1   Spider
2   Captain
3   Superman

df2

    Name_
0   Hello_1
1   Superman_1

【问题讨论】:

Pandas split DataFrame by column value的可能重复 【参考方案1】:
dfnamewithout_regex = dfName[~dfName['Name'].str.contains('_')]
dfnamewithout_regex
    Name
0   Hello
1   Spider
2   Captain
3   Superman

dfnamewith_regex = dfName[dfName['Name'].str.contains('_')]
dfnamewith_regex
Name
4   Hello_1
5   Superman_1

如果要删除索引,请添加 .reset_index(drop=True)

【讨论】:

【参考方案2】:

您可以使用此代码拆分数据框:

df1 = dfName[~dfName["Name"].str.contains('_1', na=False)].reset_index(drop=True)
df2 = dfName[dfName["Name"].str.contains('_1', na=False)].reset_index(drop=True)

df1的输出:

Name
0   Hello
1   Spider
2   Captain
3   Superman

df2的输出:

    Name
0   Hello_1
1   Superman_1

【讨论】:

【参考方案3】:

您可能需要先将您的第一个列表拆分为两个子列表:

>>> name = 'Hello Spider Captain Superman Hello_1 Superman_1'.split()
>>> name
['Hello', 'Spider', 'Captain', 'Superman', 'Hello_1', 'Superman_1']
>>> col1 = [n for n in name if '_' not in n]
>>> col2 = [n for n in name if '_' in n]
>>> col1
['Hello', 'Spider', 'Captain', 'Superman']
>>> col2
['Hello_1', 'Superman_1']
>>> 

注意:按照约定,变量应该小写,以区别于类。 https://www.python.org/dev/peps/pep-0008/#function-and-variable-names

【讨论】:

【参考方案4】:

使用Series.str.contains 进行掩码并通过反转掩码过滤不包含~ 用于df1 和不用于df2 通过boolean indexing,最后添加DataFrame.reset_index 默认RangeIndex

m = dfName['Name'].str.contains('_')

#is sample data .reset_index(drop=True) not necessary, added for general solution
df1 = dfName[~m].reset_index(drop=True)
print(df1)
       Name
0     Hello
1    Spider
2   Captain
3  Superman

df2 = dfName[m].reset_index(drop=True)
print(df2)
         Name
0     Hello_1
1  Superman_1   

【讨论】:

以上是关于如何拆分包含字符串的列的主要内容,如果未能解决你的问题,请参考以下文章

拆分包含 str 和 int 的列

如何将字符串字典转换为字典并拆分为单独的列

SQL Server:将字符串拆分为不同的列

如何拆分每 6 个字符的列数据并在 BigQuery 中形成一行

如何将日期转换为字符串,然后使用 Pentaho Kettle 将其拆分为 4 部分

将 DataFrame 中的字符串数组拆分为它们自己的列