在csv.reader中访问数据

时间:2019-05-04 00:09:52

标签: python

我正在尝试使用csv.reader访问货币对的csv文件。第一列显示日期,第一行显示货币对,例如USD / CAD。我可以读取文件,但是无法访问货币对数据来执行简单的计算。

我尝试使用next(x)跳过标题行(货币对)。如果这样做,我将收到Typeerror:csv阅读器无法下标。

path = x
file = open(path)
dataset = csv.reader(file, delimiter = '\t',)
header = next(dataset)
header

输出显示标题行

['Date,USD,Index,CNY,JPY,EUR,KRW,GBP,SGD,INR,THB,NZD,TWD,MYR,IDR,VND,AED,PGK,HKD,CAD,CHF,SEK,SDR']

我希望能够访问基础货币对,但是如上所述,我遇到类型错误。是否有一种简单的方法来访问货币对,例如我想使用USD.describe()来获取有关美元货币对的简单统计信息。

如何从此阶段转移到访问标题行下面的数据?

4 个答案:

答案 0 :(得分:0)

尝试此示例

import csv

with open('file.csv') as csv_file:
    csv_reader = csv.Reader(csv_file, delimiter='\t')
    line_count = 0
    for row in csv_reader:
        print(f'\t{row[0]} {row[1]} {row[3]}')

答案 1 :(得分:0)

从标题行的输出中可以明显看出,这些列是用逗号分隔而不是用制表符分隔的,因此,不要让delimiter = '\t'传递到csv.reader,而应让它使用默认的分隔符{改为{1}}:

','

答案 2 :(得分:0)

您确定分隔符为'\t'吗?在第一行中,您的定界符为',' ...无论如何,您可以在执行file.readline()之前先跳过csv.reader来跳过第一行:

import csv

example = """Date,USD,Index,CNY,JPY,EUR,KRW,GBP,SGD,INR,THB,NZD,TWD,MYR,IDR,VND,AED,PGK,HKD,CAD,CHF,SEK,SDR
1-2-3\tabc\t1.1\t1.2
4-5-6\txyz\t2.1\t2.2
"""

with open('demo.csv', 'w') as f:
    f.write(example)

with open('demo.csv') as f:
    f.readline()
    reader = csv.reader(f, delimiter='\t')
    for row in reader:
        print(row)
# ['1-2-3', 'abc', '1.1', '1.2']                                                                                                                                                                                                   
# ['4-5-6', 'xyz', '2.1', '2.2']

我认为您还需要其他...您能否补充您的问题:

  • csv中前三行的示例
  • 您要访问的内容的示例:

    • 您足够使用row[0]row[1]吗?
    • 还是您想要像row['Date'], row['USD']这样的“命名”访问权限
    • 或者您想要更复杂的东西,例如data_by_date['2019-05-01']['USD']

答案 3 :(得分:0)

如果您需要详细说明一些统计信息,pandas是您的朋友。无需使用csv模块,请使用pandas.read_csv

import pandas

filename = 'path/of/file.csv'
dataset = pandas.read_csv(filename, sep = '\t') #or whatever the separator is

pandas.read_csv自动将第一行用作标题。
要查看统计信息,只需执行以下操作:

dataset.describe()

或对于单列:

dataset['column_name'].describe()