在for循环中创建dataframe列

时间:2016-02-25 13:08:12

标签: python pandas

我很难弄清楚如何在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
....

感谢所有帮助

1 个答案:

答案 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"