我正在尝试将许多数据帧附加到一个空数据帧中,但是它不起作用。为此,我正在使用本教程,我的代码是这样的:
我正在循环中生成一个框架,其代码是:
def loop_single_symbol(p1):
i = 0
delayedPrice = []
symbol = []
while i<5 :
print(p1)
h = get_symbol_data(p1)
delayedPrice.append(h['delayedPrice'])
symbol.append(h['symbol'])
i+=1
df = pd.DataFrame([], columns = [])
df["delayedPrice"] = delayedPrice
df["symbol"] = symbol
df["time"] = get_nyc_time()
return df
time.sleep(4)
这段代码正在生成这样的框架:
delayedPrice symbol time
0 30.5 BAC 6:6
1 30.5 BAC 6:6
2 30.5 BAC 6:6
3 30.5 BAC 6:6
4 30.5 BAC 6:6
我正在运行这样的循环:
length = len(symbol_list())
data = ["BAC","AAPL"]
df = pd.DataFrame([], columns = [])
for j in range(length):
u = data[j]
if h:
df_of_single_symbol = loop_single_symbol(u)
print(df_of_single_symbol)
df.append(df_of_single_symbol, ignore_index = True)
print(df)
我试图将两个或多个数据帧附加到一个空数据帧中,但是使用上面的代码,我得到了:
Empty DataFrame
Columns: []
Index: []
我想要这样的结果:
delayedPrice symbol time
0 30.5 BAC 6:6
1 30.5 BAC 6:6
2 30.5 BAC 6:6
3 30.5 BAC 6:6
4 30.5 BAC 6:6
0 209.15 AAPL 6:6
1 209.15 AAPL 6:6
2 209.15 AAPL 6:6
3 209.15 AAPL 6:6
4 209.15 AAPL 6:6
我如何使用熊猫来做到这一点,什么是最好的方式呢?
注意:此行
h = get_symbol_data(p1)
正在从API获取某些数据
答案 0 :(得分:1)
正如我在评论中提到的那样,将pandas数据帧追加到一个很好的方法中。相反,我建议您使用更适合的数据存储方式,例如文件或数据库(如果您想实现可伸缩性)。
然后,您可以使用pandas进行构建,即通过仅将数据库或文件的内容读取到数据框中来进行数据分析。
现在,如果您真的想坚持这种方法,我建议join
或concat
随您获得更多数据而增加数据框
[编辑]
示例(来自我的一个脚本):
results = pd.DataFrame()
for result_file in result_files:
df = parse_results(result_file)
results = pd.concat([results, df], axis=0).reset_index(drop=True)
parse_results
是一个函数,它接受文件名并返回以正确方式格式化的数据框,由您自己决定以使其适合您的需求。
答案 1 :(得分:0)
正如评论所述,您最初的错误是您没有将 df.append
调用分配给变量 - 它返回附加的(新)DataFrame。
对于希望就地“扩展”您的 DataFrame(没有中间数据库、列表或字典)的任何其他人,这里有一个提示,显示如何简单地执行此操作:
Pandas adding rows to df in loop
基本上,从空的 DataFrame 开始,已经设置了正确的列,
然后使用 df.loc[ ]
索引将新的数据行分配到数据帧的末尾,其中 len(df)
将指向数据帧的末尾。它看起来像这样:
df.loc[ len(df) ] = ["my", "new", "data", "row"]
linked hint 中的更多详细信息。