使用yfinance导出股票数据到CSV时出现省略号问题求助
解决导出股票数据到CSV时出现省略号的问题
我尝试将指定的巴西股票数据导出到.csv文件,但查询较长时间范围的数据时,文件里总会出现无法消除的省略号。以下是我的实现代码:
import csv import yfinance as yf import sys import pandas as pd import investpy as inv try: br = inv.stocks.get_stocks(country="brazil") carteira = [] ticker = input("Insira o ticker da ação (0 para encerrar): ").upper() while ticker != "0": carteira.append(ticker) ticker = input("Insira o ticker da ação (0 para encerrar): ").upper() carteira_sa = [ticker + ".SA" for ticker in carteira] inicio, fim = map(str, input("Informe o período que deseja analisar (ano-mês-dia): ").split()) fechamento = yf.download(carteira_sa, start = inicio, end = fim)["Adj Close"] with open("dados.csv", "w") as final: d = str(fechamento) final.write(d) print("Feito") except Exception as e: print(e) #sys.exit("Erro")
问题原因
你现在的问题出在把fechamento这个DataFrame直接转成字符串写入文件——pandas为了在控制台友好显示,默认会对行数/列数较多的DataFrame进行截断,用省略号代替中间部分。直接转字符串写入自然会把这些省略号也写进去。
解决方案
正确的做法是用pandas内置的to_csv()方法导出CSV,这是专门为DataFrame导出CSV设计的方法,能完整保留所有数据,还能灵活配置格式。修改后的代码如下:
import csv import yfinance as yf import sys import pandas as pd import investpy as inv try: br = inv.stocks.get_stocks(country="brazil") carteira = [] ticker = input("Insira o ticker da ação (0 para encerrar): ").upper() while ticker != "0": carteira.append(ticker) ticker = input("Insira o ticker da ação (0 para encerrar): ").upper() carteira_sa = [ticker + ".SA" for ticker in carteira] inicio, fim = map(str, input("Informe o período que deseja analisar (ano-mês-dia): ").split()) fechamento = yf.download(carteira_sa, start = inicio, end = fim)["Adj Close"] # 用pandas的to_csv方法直接导出,完整保留所有数据 fechamento.to_csv("dados.csv") print("Feito") except Exception as e: print(e) #sys.exit("Erro")
关键修改说明
- 删掉了将DataFrame转为字符串再写入的逻辑,直接调用
to_csv()方法生成CSV文件,默认会保留日期索引(也就是每行对应的交易日期),如果不需要索引可以添加参数index=False。 to_csv()会自动处理CSV的格式规范,确保所有数据完整导出,不会出现截断的省略号。
内容的提问来源于stack exchange,提问作者Felipe Lima
相关产品推荐
相关产品推荐

