我正在处理python脚本。 我的大多数数据都是以垂直模型记录的,我希望将它们放在水平位置。
这是我的数据示例
ID,Identifier,Value
1_UK,City,Paris
1_UK,Number of the departments,75
1_UK,Department,Ile de France
1_UK,Habitant,12405426hab
2_UK,City,Ajaccio
2_UK,Number of the departments,2A
2_UK,Department,Corse du Sud
这是我想去的地方:
ID, City, Number of the departments, Department, Habitant
1_UK, Paris, 75, Ile de France, 12405426hab
2_UK, Ajaccio, 2A, Corse du sud,''
用Python读取CSV文件并不困难。我丢失的地方是我的4个标识符(城市,部门,部门和居住者的数量) ID 2_UK没有居民的价值。而且我不知道如何在我的代码中表示这一点。
import csv
csvfile = open ("Exercice1.csv",'r',encoding='utf-8')
IDs=[]
identifiers=[]
uniqueIDs=[]
uniqueidentifiers=[]
reader=csv.reader(csvfile)
for row in reader:
IDs.append(ID)
identifiers.append(identifier)
csvfile.close()
#remove duplicate value and keep order as is it.
for i in IDs:
if i not in uniqueIDs:
uniqueIDs.append(i)
for i in identifiers:
if i not in uniqueidentifiers:
uniqueidentifiers.append(i)
然后我输了 功能zip似乎无法满足我的需求,或者我没有正确使用它。
很高兴听取您的意见。
谢谢!
答案 0 :(得分:1)
使用pandas
很容易。您可以将.csv
文件导入DataFrame df
,然后使用pivot
:
In [10]: d = df.pivot(index='ID', columns='Identifier', values='Value')
In [11]: d
Out[11]:
Identifier City Department Habitant Number of the departments
ID
1_UK Paris Ile de France 12405426hab 75
2_UK Ajaccio Corse du Sud None 2A
答案 1 :(得分:0)
您可以采取以下措施:
import csv
cities = {}
with open('Exercice1.csv', 'r') as f:
reader = csv.DictReader(f)
for d in reader:
new_dict = {d['Identifier']: d['Value'], 'ID': d['ID']}
try:
cities[d['ID']] = {**cities[d['ID']], **new_dict}
except KeyError:
cities[d['ID']] = {**new_dict}
with open('output.csv', 'w') as f:
field_names = ['ID', 'City', 'Number of the departments', 'Department', 'Habitant']
writer = csv.DictWriter(f, fieldnames=field_names, lineterminator='\n', restval='')
writer.writeheader()
for k, v in cities.items():
writer.writerow(v)
使用您的数据,这给了我:
ID,City,Number of the departments,Department,Habitant
1_UK,Paris,75,Ile de France,12405426hab
2_UK,Ajaccio,2A,Corse du Sud,
如果提供的字典没有来自restval
列表的密钥,csv.DictWriter
中的field_names
参数就会插入一行。我只是用了一个空字符串,你可以用你喜欢的任何东西替换它。