pandas 仅拆分第一个分隔符中的一个,并保留所有分隔符

uoifb46i  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(201)

我有一个df,其中的列条目如下所示:

data = [['5-820.0g:2021-05-18T07:25, 5-986.x:2021-05-18T07:25', '5-820.00:2021-05-18T07:25, 5-986.x:2021-05-18T07:25'], ['5-820.00:2021-05-18T07:25, 5-986.x:2021-05-18T07:25', '5-820.00:2021-05-18T07:25, 5-986.x:2021-05-18T07:25']]

df = pd.DataFrame(data, columns=['col_1', 'col_2'])

我需要他们在第一个“:”、“T”和",“上分裂,并展开它们。
如果我用古典

df.column_name.str.split('[\:,T]', expand=True)

它也被第二个':'分割。我如何才能避免这种情况以获得所需的输出:

data_2 = [['5-820.0g', '2021-05-18' ,'07:25' , '5-986.x', '2021-05-18' ,'07:25'], ['5-820.00', '2021-05-18' ,'07:25' , '5-986.x', '2021-05-18' ,'07:25']]

df = pd.DataFrame(data_2, columns=['col_1', 'col_2', 'col_3', 'col_4', 'col_5', 'col_6'])
df
toe95027

toe950271#

您想要达到的目的并不完全清楚,但是您可以将分割限制为df之后的:

df.column_name.str.split('(?:(?<=[df]):|[,T])', expand=True)

前面没有数字

df.column_name.str.split('(?:(?<!\d):|[,T])', expand=True)

输出量:

0           1      2          3           4      5
0  5-784.0d  2021-03-29  10:15   5-784.0f  2021-03-29  10:15
更新示例:

如果:后面跟着4位数的年份和-,则拆分:

df.stack().str.split(':(?=\d{4}-)|[,T]', expand=True)

输出量:

0           1      2          3           4      5
0 col_1  5-784.0d  2021-03-29  10:15   5-784.0f  2021-03-29   None
  col_2  5-784.0d  2021-03-29  10:15   5-784.0f  2021-03-29   None
1 col_1  5-820.00  2021-05-18  07:25    5-986.x  2021-05-18  07:25
  col_2  5-820.00  2021-05-18  07:25    5-986.x  2021-05-18  07:25
2 col_1  5-820.00  2021-05-18  07:25    5-986.x  2021-05-18  07:25
  col_2  5-820.00  2021-05-18  07:25    5-986.x  2021-05-18  07:25

相关问题