【问题标题】:How to separate inconsistent columns in python?如何在python中分隔不一致的列?
【发布时间】:2019-07-05 06:16:31
【问题描述】:

我在这里附加一个虚拟数据,其中列不一致,意味着有时某些字段不存在,如果它是“无”,如何分隔和填充列,假设所有这些列都是特征

虚拟数据框:

feature1 : abc

feature2 : bfj

feature4 : 

feature5 : re


feature1 : werq

feature3 : kgh

feature4 : hjyj

feature5 : re


feature1 : hg

feature2 : jhgyj

feature3 : ytyitli

feature4 : guyhk

feature5 : yyjhj


feature2 : tyty

feature3 : ytrtf

feature4 : ewhgf

feature5 : ihyty

这是我所期待的,

 feature1     feature2       feature3         feature4       feature5 

  abc           bfj           None              None            re

  werq          None          kgh               hjyj            re

  hg            jhgyj         ytyitli           guyhk          yyjhj

  None          tyty          ytrtf             ewhgf          ihyty

谢谢

【问题讨论】:

  • 每组总是有最后一个特征,feature5
  • 您能说说数据是如何获得的吗?就像您要从中创建数据框的 csv 文件一样?如何识别每条记录等
  • @jezrael:实际上它是一个大数据,所以,有时'feature5'不存在,列不一致
  • @mujjiga:这是一个虚拟数据,我有 20 多个特征列,实际数据看起来像这样,它是一个逗号分隔的 'csv' 文件

标签: python-3.x pandas split


【解决方案1】:

想法是创建具有唯一值的字典,按最终列中的需要进行排序,此处通过使用具有排序唯一值的enumerate 进行排序,然后将Series.map 用于新列,通过Series.diff 获得差异,通过Series.lt 进行比较为< 并通过Series.cumsum 创建组,最终Dataframe 通过DataFrame.pivot 创建组:

df['col1'] = df['col1'].str.strip(' :')

d = {v: k for k, v in  dict(enumerate(df['col1'].sort_values().unique())).items()}
print (d)
{'feature1': 0, 'feature2': 1, 'feature3': 2, 'feature4': 3, 'feature5': 4}

df['g'] = df['col1'].map(d).diff().lt(-1).cumsum()

df1 = df.pivot('g', 'col1', 'col2')
print (df1)
col1 feature1 feature2 feature3 feature4 feature5
g                                                
0         abc      bfj      NaN     None       re
1        werq      NaN      kgh     hjyj       re
2          hg    jhgyj  ytyitli    guyhk    yyjhj
3         NaN     tyty    ytrtf    ewhgf    ihyty

【讨论】:

    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    相关资源
    最近更新 更多