将pandas数据帧转换为带索引的元组列表

时间:2016-08-10 15:30:37

标签: python pandas numpy tuples

我正在尝试将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

提前感谢您的帮助!

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)]