我很难弄清楚如何在for循环中创建数据框。
df = pd.DataFrame()
for sym in sorted(snapshot):
for lp in sorted(snapshot[sym]):
df['trader'] = lp
df['bid'] = snapshot[sym][lp][":b"]["LUC"]["price"] if ":b" in snapshot[sym][lp] else "0"
df['ask'] = snapshot[sym][lp][":a"]["LUC"]["price"] if ":a" in snapshot[sym][lp] else "0"
print df
print df['trader']
打印'df'会产生Columns: [trader, bid, ask] Index: []
打印'df ['交易者']会产生Series([], Name: bid, dtype: object)
如果我将df [列标题]更改为分配,则所有内容都打印正常。
我正在尝试创建一个看起来像这样的df:
trader bid ask
0 MM2 1.25 1.26
1 MM5 1.23 1.27
2 MM3 1.25 1.28
....
感谢所有帮助
答案 0 :(得分:1)
很难从您的问题中了解发生了什么以及您拥有哪些数据。在代码中,您可以在for循环的每个步骤中覆盖列。您可以添加带有索引的loc
以避免这种情况:
df = pd.DataFrame()
sym_len = len(snapshot[sym])
for i, sym in enumerate(sorted(snapshot)):
for j, lp in enumerate(sorted(snapshot[sym])):
idx = i*sym_len + j
df.loc[idx, 'trader'] = lp
df.loc[idx, 'bid'] = snapshot[sym][lp][":b"]["LUC"]["price"] if ":b" in snapshot[sym][lp] else "0"
df.loc[idx, 'ask'] = snapshot[sym][lp][":a"]["LUC"]["price"] if ":a" in snapshot[sym][lp] else "0"