如何在不更改csv文件的情况下跳过csv文件中每行的第一个元素

问题描述 投票:0回答:1

我在python中使用for循环将csv文件中的值转换为整数和浮点数,然后将它们放入代码本身的列表中,但问题是csv文件不仅有数字,而且前面还有单词每个数据行 例如。 1998 年......

我尝试弹出它,但它不起作用,因为 for 循环无法按预期运行,因为我之前说过,而且我无法更改 csv 文件,而且我不知道如何正确修复它

with open("C:/Users/yuhon/Downloads/sgexports_dataset.csv") as openfile: 
    csvreader = csv.reader(openfile) 
    next(csvreader) 
    years = [] 
    americaExports = [] 
    asiaExports = [] 
    europeExports = []
    oceaniaExports = [] 
    africaExports = []
    euExports = [] 
    for row in csvreader: 
        years.append(int(row[0])) 
        americaExports.append(float(row[1]))
        asiaExports.append(float(row[2]))
        europeExports.append(float(row[3]))
        oceaniaExports.append(float(row[4]))
        africaExports.append(float(row[5]))
        euExports.append(float(row[6]))

这是 csv 文件

Area,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009
America,30407.5,31517.7,33185.2,26015.3,26942.1,28082.6,29964.2,30481.6,35900.7,39597.6,38459.6,32154.4
Asia,50197.3,56987.4,73466.9,66382,67224.1,89338.3,107412.6,127210.4,137654.4,140908.6,149612.6,122946.2
Europe,21386.8,22748.6,22519.8,19921.3,18503.2,24347.6,30307,32611.5,34668,34695.2,33286.6,26648.6
Oceania,2938.3,3979,5001.8,4859.3,5323.4,7024.5,10203.1,14154.8,15486.2,15555,18965.2,13468
Africa,987.7,1092.3,1764.4,1266.5,1444.7,1764.9,2313.5,2989.4,3668.6,4146.7,7293.9,4786
European Union,20875.6,22289.8,21868.6,19233.2,17916.9,23591.8,29273.1,31543.5,32923.4,33233.6,31713.5,24840.8

正如您在上面的数据中看到的,每行开头都有一个单词,我不确定如何跳过每行的第一个元素,因为列表应该只有整数,我无法更改 csv 文件如果我不使用整数和浮点列表,我的其余代码将无法工作

python list for-loop append
1个回答
0
投票

您无法真正按照您处理该文件的方式处理该文件。目前尚不完全清楚您想要最终得到什么数据结构,但我建议类似:

exports = {
    'America': {1998: 30407.5, 1999: 31517.7, ...},
    'Asia': {1998: 50197.3, ...},
    ...
}

要从 CSV 文件获取该数据结构,代码如下:

exports = {}

with open(".../sgexports_dataset.csv") as f:
    reader = csv.reader(f)
    headers = next(reader)
    years = list(map(int, headers[1:]))  # [1998, 1999, ...]

    for row in reader:
        exports[row[0]] = dict(zip(years, map(float, row[1:])))

您的方法是错误的,因为列和行的处理方式错误。每一行都是一个区域,而不是每一列。

© www.soinside.com 2019 - 2024. All rights reserved.