首页 > 解决方案 > Python中的拆分和连接值

问题描述

我有这个数据格式非常奇怪的 csv 文件。月份以 1 和 0 为真或假的列分隔,工作天数在由逗号分隔的单个字符串中。

我需要将其更改为正常的日期类型,例如“日/月”,以便我可以进行一些分析。

在此处输入图像描述

我尝试使用带有融化方法的熊猫来分隔列

dfs.melt(id_vars=['ID_INVENTORY','JOBISN','DAYS_JOB'], value_vars=['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DECE'])

之后我得到了这个结果

在此处输入图像描述

但是由于熊猫没有拆分方法,我真的不知道该怎么做,但我觉得我走在正确的道路上 xD

下面的示例数据(用“;”分隔)

JAN;FEB;MAR;APR;MAY;JUN;JUL;AUG;SEP;OCT;NOV;DECE;DAYS_JOB
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31

标签: pythonpandascsvdataframedatareader

解决方案


我假设 'DAYS_JOB' 列中的 1,2,3,4.... 是字符串格式。

在这种情况下,我们可以先用逗号分割字符串,转换为列表,然后使用pandas的explode函数将列表项展开为多条记录。[ df.explode 文档]

代码将如下所示:

df['DAYS_JOB'] = df['DAYS_JOB'].apply(lambda x: list(x.split(",")))
df = df.explode('DAYS_JOB') 

推荐阅读