如何拆分包含字符串的列
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
【讨论】:
以上是关于如何拆分包含字符串的列的主要内容,如果未能解决你的问题,请参考以下文章
如何拆分每 6 个字符的列数据并在 BigQuery 中形成一行