所以,我试图输入标准普尔500(SPY)BP(O&G/能源公司)的股价。我要找的结果是一个由3列组成的“表”;1列表示日期,1列表示SPY的Adj Close,1列表示BP的Adj Close。但是,我的代码生成:
ValueError: columns overlap but no suffix specified: Index(['SPY'], dtype='object')
不过,我理解这个错误告诉我的是:索引列“Adj Close”有重叠。不管库存多少,我们每次提取的列称为“SPY”。我使用的join()方法很混乱,因为列名必须是唯一的,嗯,我就是这样解释的。。。你知道吗
代码:
import pandas as pd
def test_run():
start_date=('2016-03-10') #start date parameter
end_date=('2017-03-10') #end date parameter
dates=pd.date_range(start_date,end_date)
df1=pd.DataFrame(index=dates) #create empty dataframe df1
dfSPY=pd.read_csv("C:\SPY.csv",index_col="Date",parse_dates=True,
usecols=['Date','Adj Close'],na_values=['nan'])
#create dataframe for SPY stock
#rename Adj Close column to SPY to prevent clash
dfSPY=dfSPY.rename(columns={'Adj Close':'SPY'})
#join the 2 dataframes using DataFrame.join(), and how='inner'
df1=df1.join(dfSPY,how='inner')
#read in more stocks; SPY & BP
symbols=['SPY','BP']
for symbol in symbols:
df_temp=pd.read_csv("C{}.csv".format(symbol),index_col='Date',parse_dates=True,
usecols=['Date','Adj Close'],na_values=['nan'])
#rename to prevent clash
df_temp=df_temp.rename(columns={'Adj Close':symbol})
df1=df1.join(df_temp) #use default how='left'
print(df1)
if __name__=="__main__":
test_run()
所以,这就是我的密码。如果有人能告诉我我做错了什么,请告诉我。你知道吗
非常感谢!你知道吗
我只是想结束这个问题。所以我放弃了导入股票的.CSV文件,直接从雅虎财经“导入”。这并没有真正回答我最初的问题,所以我仍然不知道出了什么问题,但下面的解决方案更有效,我觉得更“优雅”:
感谢所有看过的人。你知道吗
您提供的代码正在覆盖for循环中df_temp的值—它只会以上次迭代中指定的值结束。我假设下面的最后两行实际上在for循环中:
在您将dfSPY加入df1之后,已经有了一个“SPY”列。您的符号列表中又出现了“SPY”,这将引发一个错误,因为pandas不能用重叠的列名连接dataframes,除非您指定一个后缀来区分列
相关问题 更多 >
编程相关推荐