首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何拆分大熊猫中的列,以便在第一列中获得空

如何拆分大熊猫中的列,以便在第一列中获得空
EN

Stack Overflow用户
提问于 2019-02-04 15:55:28
回答 5查看 276关注 0票数 3

我试图将我的输入数据列分割成2列,并使用"“作为分隔符。当我使用它时,我会得到column1中"“之前的所有条目,以及column2中的其他条目。

输入数据:-

代码语言:javascript
复制
Site ID

AIR5   
3_CCN1_3_6   
3_CCN1,2,3   
12_SDP5,6,7,8,9,10  
3_CCN2a_CCN2b_CCN3  
EMM

代码I我的使用:-

代码语言:javascript
复制
df['Node Touch'] = df['Site ID'].str.split('_').str.get(0).fillna(0)   
df['Site ID'] = df['Site ID'].str.split('_').str.get(1).fillna(0)

我所得到的输出:-

代码语言:javascript
复制
CR ID         
2969721            AIR5          0  
2969165               3         CCN1_3_6   
2968440               3         CCN1,2,3   
2968199              12         SDP5,6,7,8,9,10    
2967663               3         CCN2a_CCN2b_CCN3   
2965269             EMM          0

但是,如果输入数据中没有"_“,那么第一列应该得到0,第二列作为列值

预期产出:-

代码语言:javascript
复制
 CR ID         
2969721            0       AIR5    
2969165            3       CCN1_3_6    
2968440            3       CCN1,2,3    
2968199           12       SDP5,6,7,8,9,10    
2967663            3       CCN2a_CCN2b_CCN3    
2965269            0       EMM  
EN

回答 5

Stack Overflow用户

发布于 2019-02-04 16:09:55

修改不包含下划线的字符串,然后拆分

代码语言:javascript
复制
df.loc[~df['Site ID'].str.contains('_'), 'Site ID'] = '0_' + df['Site ID']
df[['Node Touch', 'Site ID']] = df['Site ID'].str.split('_', 1, expand = True)

    Site ID             Node Touch
0   AIR5                0
1   CCN1_3_6            3
2   CCN1,2,3            3
3   SDP5,6,7,8,9,10     12
4   CCN2a_CCN2b_CCN3    3
5   EMM                 0

选项2:如果节点列总是数字的,您可以尝试这样做。虽然我认为第一个解决方案更简单

代码语言:javascript
复制
df[['Node Touch', 'Site ID']] = df['Site ID'].str.split('_', 1, expand = True)
df['Site ID'] = df['Site ID'].combine_first(df['Node Touch'])
df['Node Touch'] = pd.to_numeric(df['Node Touch'], errors = 'coerce').fillna(0).astype(int)
票数 3
EN

Stack Overflow用户

发布于 2019-02-04 16:17:43

您可以在regex可选捕获组中使用extract

代码语言:javascript
复制
df[['Node Touch', 'Site ID']] = df['Site ID'].str.extract('(\d+)?_?(\w+)_?').fillna(0)

输出:

代码语言:javascript
复制
            Site ID Node Touch
0              AIR5          0
1          CCN1_3_6          3
2              CCN1          3
3              SDP5         12
4  CCN2a_CCN2b_CCN3          3
5               EMM          0
票数 3
EN

Stack Overflow用户

发布于 2019-02-04 16:03:50

解决问题的方法是检查字符串中是否存在“_”,并相应地更改输出。您可以通过使用np.where来实现这一点。

代码语言:javascript
复制
Node_touch = df['Site ID'].str.split('_').str.get(0)  
Site_ID = df['Site ID'].str.split('_').str.get(1)
check_underscore = df['Site ID'].str.contains('_')
df['Node Touch'] = np.where(check_underscore, Node_touch, 0)   
df['Site ID'] = np.where(check_underscore, Site_ID, df['Site ID'])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54519783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档