如何用包含字符串的列拆分

时间:2019-10-24 14:04:19

标签: python pandas

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

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

4 个答案:

答案 0 :(得分:2)

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

>>> 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

答案 1 :(得分: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

答案 2 :(得分:1)

Series.str.contains用于掩码和过滤器,方法是将~的{​​{1}}和boolean indexingdf1不包含的掩码反转,最后加{{ 3}}作为默认的df2

RangeIndex

答案 3 :(得分: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)