以下链接有美联储公布的一些数据: http://www.federalreserve.gov/monetarypolicy/fomcprojtabl20150318.htm
我复制了最后一张表格,并将其粘贴到LibreOffice Calc中的电子表格中(为了清楚起见,该表格被称为“适当的政策确定速度:联邦基金利率目标范围或目标水平的中点”)。在
现在,我要做的就是把这个表读入一个numpy数组或python列表之类的,并能够对该表进行一些基本的描述性统计。请注意,表中有“空位置”,其中许多是空的。在
在将电子表格保存为联邦公开市场委员会.csv公司名称:
data = []
f = open('fomc.csv', 'rt')
reader = csv.reader(f)
for row in reader:
data.append(row)
data
我得到一些奇怪的东西(很多'\xc2\xa0'):
^{pr2}$所以,问题是:
所有这些字符串都是正常的吗?在
b)我是否应该使用(即,这是一种聪明的方法吗?)公司名称:
data = np.array([[el.replace('\xc2\xa0',' ') for el in row] for row in data])
c)将应为浮点值但为字符串的数据转换为浮点值的最佳方法是什么?我需要循环一下吗np.数组?在
考虑到第一篇专栏文章,我希望能够做一些类似的事情
data.T[0][1:] = [float(el) for el in data.T[0][1:]]
但是这不起作用,因为你不能用这种方式改变数组的一部分。在
a)是的,这是正常的。您正在将UTF8编码的HTML内容粘贴到Calc中。该内容包括一个UTF8编码的无中断空格unicode字符,该字符用于表的空列。在
看起来像是用“普通”粘贴将表粘贴到Calc中。如果你选择了“非格式化的C”而不是“将数据粘贴到非格式化的C”中。另外,保存文件时,可以指定要使用的编码。选择UTF8或ASCII,因为该表中没有任何Unicode字符,因此两者的结果相同。在
b)如果您决定将未格式化文本粘贴到Calc中,则可以按如下方式处理文件:
^{pr2}$
^{3}$data
将包含:我使用
None
来表示空列。您可以根据需要使用0或“”。另外,我没有将列标题复制粘贴到CSV文件中,因此我不必担心它们。在c)参见b)-读取文件时,对所有非空字符串执行浮点转换。在
a)如果不使用与写入文件相同的编码方式来读取文件,则会出现错误字符。文件只不过是字节,它们可以根据编码进行不同的解释。”奇怪的“符号”几乎总是意味着你使用了错误的“解释”。在
b)打开文本文件时,应始终指定其编码。Python3强迫你这么做。在Python2中,您可以这样做:
我试过你的例子,但不能重现同样的错误。我的列表中有空字符串代替空单元格。因为无论如何你都要用合理的默认值(例如0)来替换它们,不管怎样都可以。在
c)您应该清理csv complete中的输入,然后将其传递给numpy。在
您可以随时为其编写一个函数:
^{pr2}$更正:正如nhawke所指出的,我在假设csv处理两个Python版本中的unicode时犯了一个错误。Python不是这样的。即使你正确地读了这个文件,它也会爆炸。在
不过,好消息是,csv并不是一种非常复杂的格式,因此通常您甚至不需要
^{3}$csv.reader
来使用它。读取带有unicode字符的csv文件并将其转换为行列表非常简单从那里你可以清理细胞,并继续如上所示。在
相关问题 更多 >
编程相关推荐