2017-05-02 30 views
0

使用Python 2.7。在CSV中查找詞典關鍵匹配並將值寫入下一列

我每天早上運行一個函數,用鍵和值創建一個輸出字典。輸出字典結果是這樣的:

'約翰':1
'傑克':5
'露西':235
'莎拉':33

我再打開現有的CSV文件具有像這樣的列/行:

名稱17年1月1日17年1月2日
約翰5 88
傑克31 34
薩拉45 12
Lucy 77 57

其中A列標題始終爲Name且每個連續列標題爲列中數據的日期。

我想寫,將一個函數:

打開CSV, 寫入到CSV 追加日至下一個可用的列標題(即第1行) 然後 發現在重點CSV的關鍵在我的字典 一致追加值從字典中CSV

下一個公開欄用我上面的例子,然後
名稱17年1月1日17年1月2日
約翰5 88
傑克31 34
薩拉45 12
露77 57

變成

名稱17年1月1日17年1月2日17年1月3日
約翰5 88 1
傑克31 34 5
薩拉45 12 33
露西77 57 235

我已經非常接近我試圖用下面的代碼做的事:

import pandas as pd 
import datetime 


starter_df = pd.read_csv('keyword_results.csv', names = ['Keyword']) 

#dictionary created by function 
test_dic = {"John": 12, "Jake": 45, "Sarah": 31, "Lucy": 18} 

now = datetime.datetime.now() 

str_date = now.strftime("%m %d %Y") 

starter_df[str_date] = starter_df["Keyword"].map(test_dic) 

starter_df.to_csv('keyword_results.csv') 

我正在將csv讀入一個數據幀,嘗試將新列映射到數據幀,然後將數據幀輸出到csv。

問題是,這是將日期寫入新列,但沒有下面的數據。

我很茫然,感謝您的幫助。我還是Python的新手。

回答

1

你可以用lambda來做到這一點,它很容易和快速。讀取csv時也不需要添加參數爲「names = ['Keyword']」。

import pandas as pd 
import datetime 
import os 
os.chdir('D:/mypc/') 

starter_df = pd.read_csv('keyword_results.csv') 

#dictionary created by function 
test_dic = {"John": 12, "Jake": 45, "Sarah": 31, "Lucy": 18} 

now = datetime.datetime.now() 
str_date = now.strftime("%m/%d/%Y") 

starter_df[str_date] = starter_df["Name"].map(lambda x : test_dic[x]) 

starter_df.to_csv('keyword_results.csv') 
+0

我試圖用這個,但我得到了以下錯誤:KeyError異常:「名稱」 – tulanejosh

+0

「**姓名**」是根據你所提到的名字您現有的CSV的列名(列A) (約翰,傑克,薩拉,露西)。 – Shadkhan

+0

如果您的csv的第一列總是會成爲一個名稱,您也可以執行** starter_df [str_date] = starter_df.ix [:,0] .map(lambda x:test_dic [x])** – Shadkhan

相關問題