我试图将IMF统计数据读入熊猫数据帧:
import pandas as pd
df = pd.read_table("http://www.imf.org/external/pubs/ft/weo/2013/02/weodata/WEOOct2013all.xls",
na_values=['n/a','--'],thousands=',')
Run Code Online (Sandbox Code Playgroud)
除了一个列之外的所有列都有dtype对象:
In [5]: df
Out[5]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 8318 entries, 0 to 8317
Data columns (total 49 columns):
...
dtypes: float64(1), object(48)
Run Code Online (Sandbox Code Playgroud)
我手动检查了文件,在大多数列中找不到任何非数字值或代码中明确提到的NaN值之一.
我在Wakari.io上的Anaconda 1.5.0上使用Python 2.7.5,numpy 1.7.1,pandas 0.11.0.
我想将包含两列的范围转换为字典集合。例如,如果范围是
一种 | 乙 |
---|---|
1 | 2 |
3 | 4 |
5 | 6 |
然后我想要(使用 JSON 符号)集合[{first:1, second:2}, {first:3, second:4}, {first:5, second:6}]
。
我尝试了以下方法:
Function Make_Collection(r As Range) As Collection
Dim out_collection As New Collection
Dim row As Range
For Each row In r.Rows
Dim current_row As New Dictionary
current_row.Item("first") = row.Cells(1, 1).Value2
current_row.Item("second") = row.Cells(1, 2).Value2
out_collection.Add current_row
Next
Set Make_Collection = out_collection
End Function
Run Code Online (Sandbox Code Playgroud)
但我得到[{first:5, second:6}, {first:5, second:6}, {first:5, second:6}]
,这是最后一行的三个副本,而不是每一行的字典。
我怎样才能解决这个问题?
编辑
下面@QHarr 给出了很好的答案。换句话说,我认为我的代码相当于
Function Make_Collection(r As Range) As Collection …
Run Code Online (Sandbox Code Playgroud) Microsoft 宣布了许多新的数组函数 ( https://techcommunity.microsoft.com/t5/excel-blog/announcing-new-text-and-array-functions/ba-p/3186066 ),包括HSTACK
和VSTACK
,它们组合了多个数组通过水平或垂直“堆叠”它们(毫不奇怪!)将它们合二为一。新功能目前仅对Beta通道的部分用户开放。
我正在构建一个电子表格,其中这些功能非常有用,但它必须由当前频道中的其他用户使用。我有三个“表”(不是 Excel 表,而是表=形状的数据网格),具有相同的列,其中每列都是一个数组公式。我想将它们合并到一个表中,并将整个内容引用为一个数组。
是否可以使用其他数组公式来实现某些HSTACK
版本VSTACK
?
笔记:
我已经可以访问其他稍旧的数组公式,例如SEQUENCE
, FILTER
, MAP
, SCAN
, REDUCE
, 以及LAMBDA
.
我认为与本机实现相比,任何替换公式都会非常低效,但这对我来说不是问题。
就我而言,我已经知道数组将具有兼容的大小(例如HSTACK
3 行 x 2 列和 3 行 x 4 列数组),但我事先不知道大小。
纯公式比 VBA UDF 更可取,但后者也可能是一个很好的解决方案。