在python中比较两个列表,并将结果保存在一个单独的列表中。

我的代码到目前为止。

import csv

myIds = ['1234','3456','76']
countries = []

# open the file
with open('my.csv', 'r') as infile:
  # read the file as a dictionary for each row ({header : value})
  reader = csv.DictReader(infile)
  data = {}
  for row in reader:
    for header, value in row.items():
      try:
        data[header].append(value)
      except KeyError:
        data[header] = [value]

# extract the variables and assign to lists
myFileIds = data['id']
myFileCountry = data['country']
listfromfile = [a + " " + b for a, b in zip(myFileIds, myFileCountry)]

上面的代码在listfromfile中给出了如下结果。

listfromfile = ['1 Uruguay', '2 Vatican', '1234 US', '3456 UK', '5678 Brazil','10111 Argentina','234567 Spain']

我的目标是列出一个在my.csv文件中出现过ID的国家,但也有可能myIds列表中的ID在my.csv文件中不存在。那么我需要在列表中那个地方显示值为’不支持的国家’。两个列表中的myIds和国家的长度应该是一样的,这样我就可以知道我列表中的第一个id对应于另一个列表中的第一个国家等等。希望的结果。

myIds = ['1234','3456','76']
countries = ['US', 'UK', 'Unsupported Country']

或者,我正在尝试用pandas,但也不成功:(

import pandas as pd

df=pd.read_csv('my.csv')
myIds = ['1234','3456','76']

countries = df.loc[df["id"].isin(myIds),"country"].tolist()

my.csv。

id     country
1      Uruguay
2      Vatican
1234   US
3456   UK
5678   Brazil
10111  Argentina
234567 Spain

谁能帮我解决这个问题?

解决方案:

你可以使用数据帧来实现这个功能。

import pandas as pd
input_df = pd.read_csv("test.csv")
myIds = ['1234','3456','76']
my_ids_df = pd.DataFrame(myIds,columns=['id']).astype(int)
output_df = pd.merge(input_df, my_ids_df, on=['id'], how='right')
output_df['country'] = output_df['country'].fillna('Unsupported Country')
print(list(zip(output_df['id'].values.tolist(),output_df['country'].values.tolist())))

本文来自投稿,不代表运维实战侠立场,如若转载,请注明出处:https://www.shizhanxia.com/248.html

(0)
上一篇 2022年6月29日 下午3:54
下一篇 2022年6月29日 下午3:54

相关推荐

发表评论

登录后才能评论