我知道Python几乎是出于这些目的,但我真的很难理解我如何访问数据集中的特定值,并且我尝试使用pandas和csv模块。这可能是语法问题。事情就是这样:我有一个
形式的csv文件Nation, Year, No. of refugees
Afghanistan,2013,6657
Albania,2013,199
Algeria,2013,91
Angola,2013,47
Armenia,2013,156
...
...
Afghanistan,2012,6960
Albania,2012,157
Algeria,2012,67
Angola,2012,43
Armenia,2012,143
...
等等。我想做的是每年获得难民总数,即选择某一年的所有行,并总结相关“难民难民”专栏中的所有要素。我设法做到了:
import csv
with open('refugees.csv', 'r') as f:
d_reader = csv.DictReader(f)
headers = d_reader.fieldnames
print headers
#2013
list2013=[]
for line in d_reader:
if (line['Year']=='2013'):
list2013.append(line['Refugees'])
list2013=map(int,list2013) #I have str values in my file
ref13=sum(list2013)
但我正在寻找更优雅(最重要的是,迭代)的解决方案。此外,如果我在不同年份多次执行该程序,我总是得到0:它仅适用于2013年,不确定原因。
编辑:我也试过这个,没有成功,但我认为这可能是完全错误的:
import csv
refugees_dict={}
a=range(2005,2014)
a=map(str, a)
with open('refugees.csv', 'r') as f:
d_reader = csv.DictReader(f)
for element in a:
for line in d_reader:
if (line['Year']==element):
print 'hello!'
temp_list=[]
temp_list.append(line['Refugees'])
temp_list=map(int, temp_list)
refugees_dict[a]=sum(temp_list)
print refugees_dict
我的工作的下一步将涉及对数据集的进一步研究,例如,我可能需要在全国范围内而不是按年访问数据,并且我非常感谢任何提示,因此我理解如何操纵数据。 非常感谢。
答案 0 :(得分:6)
由于您在问题中标记了大熊猫,这里是解决每年难民人数的大熊猫解决方案。
让我们说我的输入csv看起来像这样(注意我已经删除了列名前的额外空格):
Nation,Year,No. of refugees
Afghanistan,2013,6657
Albania,2013,199
Algeria,2013,91
Angola,2013,47
Armenia,2013,156
Afghanistan,2012,6960
Albania,2012,157
Algeria,2012,67
Angola,2012,43
Armenia,2012,143
你可以把它读成像这样的pandas DataFrame:
df = pd.read_csv('data.csv')
然后你可以得到这样的总数:
df.groupby(['Year']).sum()
这给出了:
No. of refugees
Year
2012 7370
2013 7150
答案 1 :(得分:1)
按年计算你可以试试这个:
f = open('file.csv').readlines()
f = [i.strip('\n').split(',') for i in f]
years = {i[1]:0 for i in f}
for i in f:
years[i[1]] += int(i[-1])
现在,你有一本字典,其中包含了所有难民的总和。
访问全国:
nations = {i[0]:0 for i in f}
for i in f:
nations[i[0]] += int(i[-1])
答案 2 :(得分:1)
考虑一下:
from collections import defaultdict
by_year = defaultdict(int) # a dict that has a 0 under every key.
然后
by_year[line['year']] += int(line['Refugees'])
现在您可以查看by_year['2013']
并查看您的总和(其他年份相同)。