如果_
到来,我有一个数据框需要拆分列
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
答案 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 indexing
的df1
不包含的掩码反转,最后加{{ 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)