我试图将我的输入数据列分割成2列,并使用"“作为分隔符。当我使用它时,我会得到column1中"“之前的所有条目,以及column2中的其他条目。
输入数据:-
Site ID
AIR5
3_CCN1_3_6
3_CCN1,2,3
12_SDP5,6,7,8,9,10
3_CCN2a_CCN2b_CCN3
EMM代码I我的使用:-
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)我所得到的输出:-
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,第二列作为列值
预期产出:-
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 发布于 2019-02-04 16:09:55
修改不包含下划线的字符串,然后拆分
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:如果节点列总是数字的,您可以尝试这样做。虽然我认为第一个解决方案更简单
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)发布于 2019-02-04 16:17:43
您可以在regex可选捕获组中使用extract:
df[['Node Touch', 'Site ID']] = df['Site ID'].str.extract('(\d+)?_?(\w+)_?').fillna(0)输出:
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发布于 2019-02-04 16:03:50
解决问题的方法是检查字符串中是否存在“_”,并相应地更改输出。您可以通过使用np.where来实现这一点。
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'])https://stackoverflow.com/questions/54519783
复制相似问题