【发布时间】:2015-08-20 13:45:02
【问题描述】:
我正在尝试执行以下操作: 我下载了一个 csv 文件,其中包含我过去 180 天的银行交易。 我想读入这个 csv 文件,然后用数据做一些图。 为此,我设置了一个程序来读取 csv 文件并通过关键字使数据可用。 例如在 csv 文件中有一列“Buchungstag”。 我用日期关键字等替换它。
import numpy as np
import matplotlib.pylab as mpl
import csv
class finanz():
def __init__(self):
path = "/home/***/"
self.dataFileName = path + "test.csv"
self.data_read = open(self.dataFileName, 'r')
self._columns = {}
self._columns[0] = ["date", "Buchungstag", "", "S15"]
self._columns[1] = ["value", "Umsatz", "Euro", "f8"]
self._ident = {"Buchungstag":"date", "Umsatz in {0}":"value"}
self.base = 1205.30
self._readData()
def _readData(self):
r = csv.DictReader(self.data_read, delimiter=';')
dtype = map(lambda x: (self._columns[x][0],self._columns[x][3]),range(len(self._columns)))
self.data = np.recarray((2), dtype=dtype)
desiredKeys = map(lambda x:x, self._ident.iterkeys())
for i, x in enumerate(r):
for k in desiredKeys:
if k == "Umsatz in {0}":
v = np.float(x[k].replace(",", "."))+self.base
else:
v = x[k]
self.data[self._ident[k]][i] = v
def getAllData(self):
return self.data.copy()
a = finanz()
b = a.getAllData()
print type(b)
print type(b['value']),type(b['date'])
样本数据
"Buchungstag";"Wertstellung (Valuta)";"Vorgang";"Buchungstext";"Umsatz in {0}";
"02.06.2015";"02.06.2015";"Lastschrift/Belast.";"Auftraggeber: abc";"-3,75";
我现在的问题是为什么 type(b['date']) 是一个类 'numpy.core.records.recarray' 而 type(b['value']) 是一个类型 'numpy.ndarray' ??
我的第二个问题是如何以我可以与 matplotlib 一起使用的格式“保存”日期?
第三个也是最后一个问题是如何检查 csv 文件的行数(用于创建空 self.data 数组)
谢谢!
【问题讨论】:
-
np.loadtxt和np.genfromtxt将csv数据收集在一个列表中(通过列表追加),并在最后将其转换为数组。他们不需要事先知道文件中的行数。他们还可以轻松处理创建结构化数组的细节。 -
是的,这是真的。但我不想有这种格式。我希望能够使用关键字访问数据,并且我也不想阅读仅提供选定部分的所有信息。我想将它扩展为包含一定范围的日期等。我有点困惑为什么日期是一个类和值是一个类型。
标签: python csv numpy matplotlib