2017-09-26 61 views
1

我有一個CSV文件的股票價格數據,我想將其放入包含日期和收盤價的字典中。如何格式化CSV的詞典列表? - Python

這裏是CSV的樣子: date close volume open high low 2017/09/22 151.89 46575410 152.02 152.27 150.56 2017/09/21 153.39 37350060 155.8 155.8 152.75 2017/09/20 156.07 52126240 157.9 158.26 153.83 2017/09/19 158.73 20565620 159.51 159.77 158.44

我想結束字典安排是這樣的:

perfect_dict = [ 
{'Date': '2017/09/22', 'Close': '151.89'}, 
{'Date': '2017/09/21', 'Close': '153.39'}, 
...] 

我當前的代碼抓起CSV數據,並創建兩個單獨列出日期和收盤價。我嘗試過使用dict(zip(dates, close_prices),但這並不像我上面提到的那樣格式化新字典。這是我的代碼:

import csv 
from collections import defaultdict 

# ---> 
columns = defaultdict(list) 

with open('mydata.csv') as f: 
    reader = csv.DictReader(f) 
    for row in reader: value2,...} 
     for (k,v) in row.items(): 
      columns[k].append(v) 

dates = columns['date'] 
close_prices = columns['close'] 

# This is what doesn't format it right 
#stock_dict = dict(zip(dates, close_prices)) 
#pprint.pprint(stock_dict) 

如果任何人都可以點我這將是真棒,謝謝正確的方向!

+0

我有問題。爲什麼逗號分隔值文件不能用逗號分隔? – HyperNeutrino

+0

有兩件事是錯誤的。你期待詞典的字典作爲輸出。但是,每個子字典都沒有關鍵字。你也沒有在CSV文件中的逗號。 –

+0

@HyperNeutrino我明白你的意思了,哈哈。這些數據僅僅是複製Google電子表格,這就是爲什麼 – jblew

回答

1

通過使用pandas閱讀csv file

  • 先讀dateclose列並存儲爲一個列表
  • 不是讓我們所需要的格式字典的列表。

代碼

import pandas as pd 
df = pd.read_csv("file_name.csv") 
# read the date and close column and store as a list. 
time_list = list(df['date']) 
close_list = list(df['close']) 
perfect_dict = [] 
# here take the minimum length 
# because avoiding index error 
take_length = min(len(time_list),len(close_list)) 
for i in range(take_length): 
    temp_dict={} 
    temp_dict["Date"]=time_list[i] 
    temp_dict["Close"] = close_list[i] 
    perfect_dict.append(temp_dict) 
print(perfect_dict) 

的另一種可能的方式。

import csv 
perfect_dict=[] 
with open('file.csv') as f: 
    reader = list(csv.reader(f)) 
    for row in reader[1:]: 
     temp_dict = {} 
     temp_dict["Date"] = row[0] 
     temp_dict["Close"] = row[1] 
     perfect_dict.append(temp_dict) 
print(perfect_dict) 
+0

謝謝,這工作完美! – jblew

3

您可以使用字典解析:

你不能字典存儲在一組作爲字典本身是unhashable
import csv 

data = list(csv.reader(open('filename.csv'))) 
final_data = [{a:b for a, b in zip(["Date", "Close"], i[:2])} for i in data[1:]] 

注意。

+0

這不起作用;它只是將一個從「Date」到該行的地圖列表作爲一個字符串。沒有幫助OP ... **編輯**我認爲我的CSV不是逗號分隔...對不起 – HyperNeutrino

+0

@HyperNeutrino不,這應該工作。OP請求使用此代碼創建的鍵「Date」和「Close」創建詞典列表。但是,如果有一個明顯的語法錯誤,我沒有看到請讓我知道。 – Ajax1234

+0

感謝@ Ajax1234這種方法的工作原理! – jblew

1

我不認爲你想要的格式是可能的 - 你的意思是說你想要一個字典列表?正如所寫,這是一本詞典詞典,但外部詞典沒有任何鍵。

此外,如果你想爲一個給定的字典鍵的值,你可能想要做的事,如:

columns[k] = v 

編輯:

這是否接近你在找什麼對於?將列實例化爲空列表,然後將csv的每一行格式化爲字典並附加到該列表。

columns = [] 

with open('mydata.csv') as f: 
    reader = csv.DictReader(f) 
    for row in reader: 
     row_as_dict = {k: v for k, v in row.items()} 
      columns.append(row_as_dict) 
+0

我認爲詞典列表會更好,是的。我不知道看起來會是什麼樣子,但我只是希望每個日期和相應的近似價格都是構成整個列表的單個實體。那可能嗎? – jblew

+0

已添加附加信息。輸出現在應該更像:list_of_dicts = [ {'Date':'2017/09/22','Close':'151.89'}, {'Date':'2017/09/21','Close ':'153.39'}, ...] – speedyturkey

+0

我運行了你在底部添加的代碼,並且它返回一個錯誤:'columns [k] .append(row_as_dict) NameError:name'k'is not defined' – jblew