在csv表中扩展冗余列的方法是什么?

时间:2018-05-04 20:42:45

标签: python csv combinations libraries

我有一个13列的csv文件,我试图以特定的方式扩展。我的专栏是:

firstName, firstName2, lastName, lastName2, location1, location2, location3, location4, email, email2, phone, phone2, phone3

数据不是很干净(人们可以想象当涉及到人们的名字时),我想将每个条目的数据扩展为大量可能的数据组合。不完全是每种可能的数据组合,但接近它。并非每个条目都包含所有数据(实际上我并不认为任何行包含每列的数据)。

这样做的最好方法是超级嵌套的多分支结构吗?基本上现在我开始使用col1并测试一个值,然后测试col2,将每个组合添加到字典列表中,然后将这些值附加到字典的主列表中。

例如在dictionary1上

  • firstName,lastName,location1,email,phone
  • firstName,lastName,location1,email,phone2
  • ...
  • firstName,lastName,location2,email,phone
  • ...
  • firstNamefirstName2(合并),姓氏,位置,电子邮件,电话

每行将变成36行(老实说,我不知道,从来没有非常擅长组合数学,尤其是条件数。)

有什么我可以用来使这更简单吗?图书馆还是什么?

更新:实际的组合算法是:

fn      ln      loc email phones
fn      lnln2   loc email phones
fn      ln2     loc email phones
fnfn2   ln      loc email phones
fnfn2   lnln2   loc email phones
fnfn2   ln2     loc email phones
fn2     ln      loc email phones
fn2     lnln2   loc email phones
fn2     ln2     loc email phones

4个地点,2封电子邮件和3部手机扩展。

我不想要空值的冗余。我认为在制作csv文件之后删除重复会更容易(在Excel中这很简单)。

1 个答案:

答案 0 :(得分:0)

解决方案只是创建一个3嵌套for循环并执行九个字典创建语句。这导致每行216个条目,这意味着我可以使用从stackoverflow(Removing duplicate rows from a csv file using a python script)复制的简单脚本来消除重复项

仍有裁员。例如,当没有firstname2附加时,空的firstname2添加了一个空格,我的重复查找器识别出firstname和firstname +' '作为单独的价值观并保留了欺骗。但是,我并不介意,这对我的目的来说并不重要。我只是不想要每个216值的冗余。

final = [{}]

for agent in agents:

   #create a list of dictionaries for this agent
   finalagents = [{}]
   for i in range(1,4):
    for j in range(1,3):
        for k in range(1,2):
            city = 'city' + str(i)
            state = 'state' + str(i)
            zipcode = 'zip' + str(i)
            phone = 'phone' + str(j)
            email = 'email' + str(k)
            fnfn1 = agent['fn'] + ' ' + agent['fn1']
            lnln1 = agent['ln'] + ' ' + agent['ln1']

            #fn ln
            finalagents.append({'fn': agent['fn'], 'ln': agent['ln'], 'city': agent[city], 'state': agent[state],
                'zip': agent[zipcode], 'phone': agent[phone], 'email': agent[email]}) 
            #fn lnln1 
            finalagents.append({'fn': agent['fn'], 'ln': lnln1, 'city': agent[city], 'state': agent[state],
                'zip': agent[zipcode], 'phone': agent[phone], 'email': agent[email]}) 
            #fn ln1
            finalagents.append({'fn': agent['fn'], 'ln': agent['ln1'], 'city': agent[city], 'state': agent[state],
                'zip': agent[zipcode], 'phone': agent[phone], 'email': agent[email]}) 
            #fnfn1 ln 
            finalagents.append({'fn': fnfn1, 'ln': agent['ln'], 'city': agent[city], 'state': agent[state],
                'zip': agent[zipcode], 'phone': agent[phone], 'email': agent[email]}) 
            #fnfn1 lnln1
            finalagents.append({'fn': fnfn1, 'ln': lnln1, 'city': agent[city], 'state': agent[state],
                'zip': agent[zipcode], 'phone': agent[phone], 'email': agent[email]}) 
            #fnfn1 ln1
            finalagents.append({'fn': fnfn1, 'ln': agent['ln1'], 'city': agent[city], 'state': agent[state],
                'zip': agent[zipcode], 'phone': agent[phone], 'email': agent[email]}) 
            #fn1 ln
            finalagents.append({'fn': agent['fn1'], 'ln': agent['ln'], 'city': agent[city], 'state': agent[state],
                'zip': agent[zipcode], 'phone': agent[phone], 'email': agent[email]}) 
            #fn1 lnln1
            finalagents.append({'fn': agent['fn1'], 'ln': lnln1, 'city': agent[city], 'state': agent[state],
                'zip': agent[zipcode], 'phone': agent[phone], 'email': agent[email]}) 
            #fn1 ln1
            finalagents.append({'fn': agent['fn1'], 'ln': agent['ln1'], 'city': agent[city], 'state': agent[state],
                'zip': agent[zipcode], 'phone': agent[phone], 'email': agent[email]}) 

#add the finalagents list of dictionaries to the official final list of dictionaries in an iterable for loop
for dictionary in finalagents:
    final.append(dictionary)