我知道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
...
Run Code Online (Sandbox Code Playgroud)
等等.我想做的是每年获得难民总数,即选择某一年的所有行,并总结相关"难民难民"专栏中的所有要素.我成功地做到了这一点:
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)
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一个更优雅(最重要的是,迭代)的解决方案.此外,如果我在不同年份多次执行该程序,我总是得到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
Run Code Online (Sandbox Code Playgroud)
我工作的下一步将涉及对数据集的进一步研究,例如,我可能需要在全国范围内而不是逐年访问数据,我非常感谢任何提示,因此我理解如何操纵数据.非常感谢.
自从你在问题中标记了大熊猫,这里有一个大熊猫解决方案来获得每年的难民数量.
假设我的输入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
Run Code Online (Sandbox Code Playgroud)
你可以把它读成像这样的pandas DataFrame:
df = pd.read_csv('data.csv')
Run Code Online (Sandbox Code Playgroud)
然后你可以得到这样的总数:
df.groupby(['Year']).sum()
Run Code Online (Sandbox Code Playgroud)
这给出了:
No. of refugees
Year
2012 7370
2013 7150
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |