2015-01-07 1 views
0

Спасибо, что помогли мне уточнить и мой вопрос. Два набора кода ниже.Импортируйте CSV-файл в список, используйте имя файла как идентификатор

Сначала извлекает данные из онлайн-источника данных, добавляет символ запаса в качестве идентификатора, «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), похожий на код выше, данные импортируются и список создается.

Код для чтения 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 

ответ

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

Я не говорю, что это чистый способ, но он будет работать. Я также не уверен, что вы говорили об изменении '[' to '{', но это изменение не требуется (вы, конечно, может).

Удачи вам!

+0

Благодарим за отзыв. Например, «XX» - это имя файла CSV (XX.csv), а также несколько других файлов, например YY.csv, GG.csv и т. Д. – Rayl54292

+0

Благодарим вас за ответ. В примере «XX» - это имя файла CSV (XX.csv), а также несколько других файлов, например YY.csv, GG.csv и т. Д. Хотелось бы прочитать XX.csv, сделать идентификатор XX для входящих значений, а затем повторите процесс с YY.csv, GG.CSV в один комбинированный список или панель. Спасибо, что помогли мне уточнить мой вопрос. – Rayl54292

+0

@ Benji, если вы внимательно посмотрите на код, который размещен OP, вывод не является строкой, которая содержит «[», но вместо этого отображается «[», когда этот список отображается, поэтому этот метод не будет работать вообще. – chthonicdaemon

0

Вывод, который вы видите в первом случае, это dictionary со строковыми клавишами и значениями DataFrame. Минимальный пример:

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 Я изменил список данных и использовал {} вместо [] для файла во всех файлах: df = pd.read_csv (file, index_col = 0) data [file] = df # Здесь я изменил способ добавления данных

Смежные вопросы