【发布时间】:2020-09-08 11:26:00
【问题描述】:
我编写了以下简单代码来说明我遇到的问题:
import pandas as pd
symbols = {'TEST1', 'TEST2', 'TEST3'}
i = 0
for sym in symbols:
if i == 0:
cum_df = pd.DataFrame([sym])
i = 1
else:
cum_df.append(pd.DataFrame([sym]), ignore_index=True)
cum_df
我期待cum_df 看起来像这样:
+---+-------+
| | 0 |
+---+-------+
| 0 | TEST1 |
| 1 | TEST2 |
| 2 | TEST3 |
+---+-------+
但它看起来像这样:
+---+-------+
| | 0 |
+---+-------+
| 0 | TEST3 |
+---+-------+
我哪里错了?
【问题讨论】:
-
在数据帧上追加的方法不像列表那样工作,您需要重新分配它,因此在您的其他情况下,尝试使用
cum_df = cum_df.append(pd.DataFrame([sym]), ignore_index=True),但构建数据帧不是一个好习惯方式 -
谢谢 - 这工作但它似乎需要一段时间(相对于一个简单的循环),然后在 TEST2、TEST3、TEST1 中输出 df。任何想法为什么?从循环构建数据框的更好方法是什么?实际上,我是从数据库中提取
symbols,然后在循环中使用它们,我在数据库中查询数据,然后从中提取并构建组合数据框。 -
最佳实践是将您查询的数据框附加到
l = []和for sym in symbols: l.append(pd.DataFrame([sym]))之类的列表中,然后在循环之外执行cum_df = pd.concat(l)(如果您可以在列表理解中执行) ,用concat方法检查这个link的最后一个例子 -
是的 - 那个链接很棒!谢谢
标签: python pandas dataframe jupyter-notebook