我正在使用以下代码来创建一个DataFrame,其中包含两个符号的结尾价格,分别以列标题作为它们的符号名称。使用for循环来构建DataFrame
symbols=['KEL','PAEL']
start_date = '2016-05-01'
end_date = '2017-03-02'
allocation = 50000
def data(symbol):
dates=pd.date_range(start_date,end_date)
df=pd.DataFrame(index=dates)
df_temp=pd.read_csv('/home/furqan/Desktop/python_data/{}.csv'.format(str(symbol)),usecols=['Date','Close'],
parse_dates=True,index_col='Date',na_values=['nan'])
df_temp = df_temp.rename(columns={'Close': symbol})
df=df.join(df_temp)
df=df.fillna(method='ffill')
df=df.fillna(method='bfill')
return df
for symbol in symbols:
df=data(symbol)
pass
print(df)
当我运行上面的代码时,它会用新符号覆盖列而不是在DataFrame中创建其他列。
如果我想要它为DataFrame中的每个新符号创建新列,那么如何在不使用函数内的任何for循环的情况下实现该功能。
预计outoput:
KEL PAEL
2016-05-01 7.07 61.74
2016-05-02 7.07 61.74
2016-05-03 7.21 62.19
2016-05-04 7.21 62.72
2016-05-05 7.20 64.24
2016-05-06 7.17 63.88
2016-05-07 7.17 63.88
2016-05-08 7.17 63.88
2016-05-09 7.25 64.12
2016-05-10 7.28 65.59
2016-05-11 7.43 65.78
输出我:
PAEL
2016-05-01 61.74
2016-05-02 61.74
2016-05-03 62.19
2016-05-04 62.72
2016-05-05 64.24
2016-05-06 63.88
2016-05-07 63.88
2016-05-08 63.88
2016-05-09 64.12
2016-05-10 65.59
2016-05-11 65.78
在你的循环,你正在做DF =数据(符号)覆盖你DF。你应该尝试像df [symbol] = data(symbol)那样添加一个新列 – Vaishali
@A-Za-z它会导致一个错误:NameError:name'df'没有被定义 –
@FurqanHashim,但是你仍然需要创建dataframe对象在使用之前,这就是python错误告诉你的。 – Boud