将CSV文件导入List,使用文件名作为标识符

时间:2015-01-07 15:38:21

标签: python list csv pandas

感谢您帮助我澄清我的问题。下面有两组代码。

首先从在线数据源检索数据,添加股票代码作为标识符," 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

2 个答案:

答案 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)

我不是说这是最干净的方式,但它会起作用。我也不确定你是怎么说的,将'['改为'{'但不需要改变(你肯定可以)。

祝你好运!