在 csv table 中扩展冗余列的方法?
Way to expand redundant columns in a csv table?
我有一个 13 列的 csv 文件,我正在尝试以特定方式展开。我的专栏是:
firstName, firstName2, lastName, lastName2, location1, location2, location3, location4, email, email2, phone, phone2, phone3
数据不是很干净(当涉及到人名时可以想象),我想将每个条目的数据扩展为大量可能的数据组合。不完全是数据的所有可能组合,但接近它。并非每个条目都包含所有数据(事实上我不认为任何行都包含每一列的数据)。
最好的办法真的是超嵌套多分支结构吗?基本上现在我从 col1 开始测试一个值,然后测试 col2,将每个组合添加到字典列表,然后将这些值附加到字典的主列表。
例如字典 1
- 名字、姓氏、位置 1、电子邮件、phone
- 名字、姓氏、位置 1、电子邮件、phone2
- ...
- 名字、姓氏、位置 2、电子邮件、phone
- ...
- firstNamefirstName2(组合),lastName,位置,电子邮件,phone
每行会变成 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 个 phone 展开。
而且我不想要空值的冗余。我认为在制作 csv 文件后删除重复项会更容易(这在 Excel 中很简单)。
解决方案只是创建一个 3 层嵌套的 for 循环并执行九个字典创建语句。这导致每行有 216 个条目,这意味着我可以使用从 Whosebug 复制的简单脚本来消除重复项 (Removing duplicate rows from a csv file using a python script)
仍然有裁员。例如,当没有 firstname2 附加时,空的 firstname2 添加了一个 space,我的重复查找器将 firstname 和 firstname+' ' 识别为单独的值并保留了 dupes。不过,我不介意,这对我的目的来说并不重要。我只是不希望每个值都有 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)
我有一个 13 列的 csv 文件,我正在尝试以特定方式展开。我的专栏是:
firstName, firstName2, lastName, lastName2, location1, location2, location3, location4, email, email2, phone, phone2, phone3
数据不是很干净(当涉及到人名时可以想象),我想将每个条目的数据扩展为大量可能的数据组合。不完全是数据的所有可能组合,但接近它。并非每个条目都包含所有数据(事实上我不认为任何行都包含每一列的数据)。
最好的办法真的是超嵌套多分支结构吗?基本上现在我从 col1 开始测试一个值,然后测试 col2,将每个组合添加到字典列表,然后将这些值附加到字典的主列表。
例如字典 1
- 名字、姓氏、位置 1、电子邮件、phone
- 名字、姓氏、位置 1、电子邮件、phone2
- ...
- 名字、姓氏、位置 2、电子邮件、phone
- ...
- firstNamefirstName2(组合),lastName,位置,电子邮件,phone
每行会变成 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 个 phone 展开。
而且我不想要空值的冗余。我认为在制作 csv 文件后删除重复项会更容易(这在 Excel 中很简单)。
解决方案只是创建一个 3 层嵌套的 for 循环并执行九个字典创建语句。这导致每行有 216 个条目,这意味着我可以使用从 Whosebug 复制的简单脚本来消除重复项 (Removing duplicate rows from a csv file using a python script)
仍然有裁员。例如,当没有 firstname2 附加时,空的 firstname2 添加了一个 space,我的重复查找器将 firstname 和 firstname+' ' 识别为单独的值并保留了 dupes。不过,我不介意,这对我的目的来说并不重要。我只是不希望每个值都有 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)