我正在尝试将pandas数据帧转换为元组列表。但是我在获取元组中的值的索引(即日期)时遇到了困难。我的第一步是进入这里,但他们没有为元组添加任何索引。
Pandas convert dataframe to array of tuples
我唯一的问题是访问numpy数组中每一行的索引。我有一个如下所示的解决方案,但它使用了一个额外的计数器indexCounter
,看起来很草率。我觉得应该有一个更优雅的解决方案来从特定的numpy数组中检索索引。
def get_Quandl_daily_data(ticker, start, end):
prices = []
symbol = format_ticker(ticker)
try:
data = quandl.get("WIKI/" + symbol, start_date=start, end_date=end)
except Exception, e:
print "Could not download QUANDL data: %s" % e
subset = data[['Open','High','Low','Close','Adj. Close','Volume']]
indexCounter = 0
for row in subset.values:
dateIndex = subset.index.values[indexCounter]
tup = (dateIndex, "%.4f" % row[0], "%.4f" % row[1], "%.4f" % row[2], "%.4f" % row[3], "%.4f" % row[4],row[5])
prices.append(tup)
indexCounter += 1
提前感谢您的帮助!
答案 0 :(得分:5)
您可以迭代to_records(index=True)
的结果。
说你从这开始:
In [6]: df = pd.DataFrame({'a': range(3, 7), 'b': range(1, 5), 'c': range(2, 6)}).set_index('a')
In [7]: df
Out[7]:
b c
a
3 1 2
4 2 3
5 3 4
6 4 5
然后这是有效的,除了它不包括索引(a
):
In [8]: [tuple(x) for x in df.to_records(index=False)]
Out[8]: [(1, 2), (2, 3), (3, 4), (4, 5)]
但是,如果您通过index=True
,那么它会按您的要求执行:
In [9]: [tuple(x) for x in df.to_records(index=True)]
Out[9]: [(3, 1, 2), (4, 2, 3), (5, 3, 4), (6, 4, 5)]