使用Python处理来自csv文件的数据

时间:2017-06-05 18:10:45

标签: python csv pandas

我知道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

我的工作的下一步将涉及对数据集的进一步研究,例如,我可能需要在全国范围内而不是按年访问数据,并且我非常感谢任何提示,因此我理解如何操纵数据。 非常感谢。

3 个答案:

答案 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']并查看您的总和(其他年份相同)。