显示空DataFrame作为输出



这是我的代码。我试图连接数据,但它显示空数据框。我希望在列表中提供的符号的详细信息作为输出,将以数据帧的形式。

import pandas as pd
from nsepy import get_history
from datetime import date

symbol=['SBIN','ITC']
data1=[]
data1= pd.DataFrame(data1)
counter=0
for x in symbol:
data = get_history(symbol=x, start=date(2022,4,25), end=date(2022,5,5), index= True)
data = pd.DataFrame(data)
data1= pd.concat([data1,data])
print(x)
print(data1)
我得到的输出是:
SBIN
Empty DataFrame
Columns: [Open, High, Low, Close, Volume, Turnover]
Index: []
ITC
Empty DataFrame
Columns: [Open, High, Low, Close, Volume, Turnover]
Index: []

使用此解决方案需要注意以下几点:

  1. 数据质量不是很好。我的意思是SBIN有x个填满的字段而NIFTY有y个填满的字段。因此,当您连接创建一个合并的数据框时,您将获得一个数据框,其中NIFTYSBIN的x和y字段分别具有"NAN"值。这是数据的问题,不是你能做的。
  2. 文档中提到使用data[['Close']].plot()来处理NAN的值。我从我在数据中观察到的是,它确实删除了NAN值,但将其替换为空字符串。
  3. 不同的索引有不同的方式击中API,这是一个糟糕的设计决定。我从他们的文档中注意到,像NIFTY, INDIAVIX, NIFTY NEXT 50这样的索引都需要get_history()内部的index=True参数。但是,如果您设置index=True并尝试获取SBIN的数据,则会收到一个空数据帧。为什么他们这样做是令人困惑的,但你将不得不与他们的API的限制,除非你能够下载这个数据库。

解决了这些问题后,可以使用下面的代码:

list_indices = ['SBIN', 'INDIAVIX', 'ITC']
# Using a dictionary for O(1) look up time. 
indices_with_index_false = {'SBIN': '', 'ITC': ''}
consolidated_dataframe = pd.DataFrame()
for index in list_indices:
if index in dict_index_false:
data = get_history(symbol=index, start=date(2015, 1, 1), end=date(2015, 1, 31), index=False)
data[['Close']].plot()
else:
data = get_history(symbol=index, start=date(2015, 1, 1), end=date(2015, 1, 31), index=True)
data[['Close']].plot()
consolidated_dataframe = pd.concat([consolidated_dataframe, data], sort=False)
consolidated_dataframe.to_csv("test.csv")

我建议在查看CSV文件时查看Excel或其他适合您的输出。

最新更新