如何将字典中的值添加到 CSV 中的新列中?
How can I add values from a dictionary into a new column in a CSV?
如果我有数据想添加为已构建的 CSV 中的新列。
我有一个字典,其中包含要为每个字典键添加的新数据(对应于 CSV 中的人员 ID)。
import pandas as pd
#New values to add for each ID
#'ID': Area, Age, Temperature
myData = {
'A00147': (189, 40, 39),
'A00198': (142, 28, 28),
'A00360': (202, 40, 39),
'A00367': (168, 33, 33),
'BA9330': (142, 29, 29),
}
我有这个 CSV:
ID,Sex,Height,Weight,Hair,Eyes
A00147,Male,5 ft. 07 in.,185 lbs.,Brown,Blue
A00198,Male,6 ft. 02 in.,190 lbs.,Red or Auburn,Brown
A00360,Male,5 ft. 09 in.,167 lbs.,Gray or Partially Gray,Green
A00367,Male,6 ft. 00 in.,245 lbs.,Black,Brown
我希望它变成:
ID,Sex,Height,Weight,Hair,Eyes,Area,Age,Temperature
A00147,Male,5 ft. 07 in.,185 lbs.,Brown,Blue,189,40,39
A00198,Male,6 ft. 02 in.,190 lbs.,Red or Auburn,Brown,142,28,28
A00360,Male,5 ft. 09 in.,167 lbs.,Gray or Partially Gray,Green,202,40,39
A00367,Male,6 ft. 00 in.,245 lbs.,Black,Brown,142,29,29
所以我会将新列及其值添加到相应的 ID。
所以循环的第一次迭代将查看字典 myData,查看第一个键 ('A00147'),检查它是否存在于 CSV 的 ID 列中。如果是,它将创建 3 个新列并添加它们各自的值。然后它将查找 'A00198',如果存在,则将 3 个新值添加到先前创建的新列中。如果它发现 CSV ID 中不存在的键(例如:'BA9330'),它会跳过它。
我正在考虑使用 Pandas 来完成这项任务,但不完全确定如何实现它。
从 myData
创建数据框,然后将其与您的实际数据集合并:
import pandas as pd
df = pd.read_csv('data.csv')
cols = ['Area', 'Age', 'Temperature']
df1 = (pd.DataFrame.from_dict(myData, orient='index', columns=cols)
.rename_axis('ID').reset_index())
out = df.merge(df1, on='ID', how='left')
out.to_csv('data.csv', index=False)
输出:
ID
Sex
Height
Weight
Hair
Eyes
Area
Age
Temperature
A00147
Male
5 ft. 07 in.
185 lbs.
Brown
Blue
189
40
39
A00198
Male
6 ft. 02 in.
190 lbs.
Red or Auburn
Brown
142
28
28
A00360
Male
5 ft. 09 in.
167 lbs.
Gray or Partially Gray
Green
202
40
39
A00367
Male
6 ft. 00 in.
245 lbs.
Black
Brown
168
33
33
如果我有数据想添加为已构建的 CSV 中的新列。
我有一个字典,其中包含要为每个字典键添加的新数据(对应于 CSV 中的人员 ID)。
import pandas as pd
#New values to add for each ID
#'ID': Area, Age, Temperature
myData = {
'A00147': (189, 40, 39),
'A00198': (142, 28, 28),
'A00360': (202, 40, 39),
'A00367': (168, 33, 33),
'BA9330': (142, 29, 29),
}
我有这个 CSV:
ID,Sex,Height,Weight,Hair,Eyes A00147,Male,5 ft. 07 in.,185 lbs.,Brown,Blue A00198,Male,6 ft. 02 in.,190 lbs.,Red or Auburn,Brown A00360,Male,5 ft. 09 in.,167 lbs.,Gray or Partially Gray,Green A00367,Male,6 ft. 00 in.,245 lbs.,Black,Brown
我希望它变成:
ID,Sex,Height,Weight,Hair,Eyes,Area,Age,Temperature A00147,Male,5 ft. 07 in.,185 lbs.,Brown,Blue,189,40,39 A00198,Male,6 ft. 02 in.,190 lbs.,Red or Auburn,Brown,142,28,28 A00360,Male,5 ft. 09 in.,167 lbs.,Gray or Partially Gray,Green,202,40,39 A00367,Male,6 ft. 00 in.,245 lbs.,Black,Brown,142,29,29
所以我会将新列及其值添加到相应的 ID。
所以循环的第一次迭代将查看字典 myData,查看第一个键 ('A00147'),检查它是否存在于 CSV 的 ID 列中。如果是,它将创建 3 个新列并添加它们各自的值。然后它将查找 'A00198',如果存在,则将 3 个新值添加到先前创建的新列中。如果它发现 CSV ID 中不存在的键(例如:'BA9330'),它会跳过它。
我正在考虑使用 Pandas 来完成这项任务,但不完全确定如何实现它。
从 myData
创建数据框,然后将其与您的实际数据集合并:
import pandas as pd
df = pd.read_csv('data.csv')
cols = ['Area', 'Age', 'Temperature']
df1 = (pd.DataFrame.from_dict(myData, orient='index', columns=cols)
.rename_axis('ID').reset_index())
out = df.merge(df1, on='ID', how='left')
out.to_csv('data.csv', index=False)
输出:
ID | Sex | Height | Weight | Hair | Eyes | Area | Age | Temperature |
---|---|---|---|---|---|---|---|---|
A00147 | Male | 5 ft. 07 in. | 185 lbs. | Brown | Blue | 189 | 40 | 39 |
A00198 | Male | 6 ft. 02 in. | 190 lbs. | Red or Auburn | Brown | 142 | 28 | 28 |
A00360 | Male | 5 ft. 09 in. | 167 lbs. | Gray or Partially Gray | Green | 202 | 40 | 39 |
A00367 | Male | 6 ft. 00 in. | 245 lbs. | Black | Brown | 168 | 33 | 33 |