感谢您帮助我澄清我的问题。下面有两组代码。
首先从在线数据源检索数据,添加股票代码作为标识符," AA"在下面的输出示例中,创建包含下载数据的列表,效果很好。
stocks = ['AA', 'AAPL', 'IBM']
start = datetime(1990, 1, 1)
end = datetime.today()
data = {}
for stock in stocks:
print stock
stkd = DataReader(stock, 'yahoo', start, end).sort_index()
data[stock] = stkd
Output:
**{'AA':** OPEN HIGH LOW CLOSE VOLUME
Date
1990-01-02 75.00 75.62 74.25 75.62 4039200
1990-01-03 76.00 76.75 76.00 76.75 7332000
第二次读取CSV文件并创建列表,很好,目标是添加标识符(使用CSV文件名),类似于上面的代码,因为导入了数据并创建了List。
CSV读取代码。
path =r'C:\Users\Data'
allFiles = glob.glob(path + "/*.csv")
frame = pd.DataFrame()
list = []
for file in allFiles:
df = pd.read_csv(file, index_col=0)
list.append(df)
frame = pd.concat(list)
Current Output:
[ Time Open High Low Close Vol OI
Date
12/17/1984 11:15 817.75 820.25 817.00 820.25 73445 309260
12/18/1984 11:15 820.25 821.00 818.50 819.25 87505 308240
Desired Output:
{'XX': Time Open High Low Close Vol OI
Date
12/17/1984 11:15 817.75 820.25 817.00 820.25 73445 309260
12/18/1984 11:15 820.25 821.00 818.50 819.25 87505 308240
想要读取XX.csv,为传入值创建XX标识符,然后将YY.csv,GG.CSV重复处理到一个组合列表或面板中。
尝试了几件没有太多运气的东西,我是python的新手,但由于Stackoverflow和类似的网站已经相当不错。
CSV文件格式
Date,Time,Open,High,Low,Close,Vol,OI
12/17/1984,11:15,817.75,820.25,817,820.25,73445,309260
12/18/1984,11:15,820.25,821,818.5,819.25,87505,308240
答案 0 :(得分:0)
您在第一种情况下看到的输出是带有字符串键和DataFrame值的dictionary。一个最小的例子:
import pandas
data = {}
for key in ['A', 'B', 'C']:
data[key] = pandas.DataFrame({'Column': [1]})
print data
输出:
{'A': Column
0 1, 'B': Column
0 1, 'C': Column
0 1}
在第二种情况下,您使用的是list。仅供将来参考,您不应使用名称list
,因为它会影响内置列表构造函数。
我以前的例子可以用列表重做:
data = []
for key in ['A', 'B', 'C']:
data.append(pandas.DataFrame({'Column': [1]}))
print data
输出:
[ Column
0 1, Column
0 1, Column
0 1]
因此,为了匹配您的第一个案例,您应该使用CSV文件的字典而不是列表,如下所示:
data = {}#note我已将列表更改为数据,并使用{}代替[] for allFiles中的文件: df = pd.read_csv(file,index_col = 0) data [file] = df#这里我改变了添加数据的方式
答案 1 :(得分:-1)
您可以在创建列表后添加CSV文件名。 在for循环之后和定义框架之前,将左括号('[')替换为您想要的任何内容。
所以......(注意第4行)
for file in allFiles:
df = pd.read_csv(file, index_col=0)
list.append(df)
list[0].replace("[", "**{'XX':**")
frame = pd.concat(list)
我不是说这是最干净的方式,但它会起作用。我也不确定你是怎么说的,将'['改为'{'但不需要改变(你肯定可以)。
祝你好运!