2012-12-10 61 views
0

我有一個CSV代理機構名稱和地址。如果我想要一組具有相同地址的代理機構名稱(特別是相同的郵政編碼),那麼我如何在R或Python中執行此操作?無論哪種方式最有效率都是可取的,但我仍然在學習。 Google Refine已經爲我提供了每個郵政編碼羣的統計信息,但我只需要知道哪些代理機構與這些郵政編碼相對應。在R或Python中列出具有相同值的CSV單元格?

PS。是的,我知道郵政編碼是不好的依靠;這一點就是爲了說明這一點。

實施例的輸入數據:

enter image description here

最終輸出(與shape文件進行合併):

enter image description here

回答

5

您應該能夠只是構建字典:

import csv 

from collections import defaultdict 

agencies = defaultdict(list) 

with open('file.csv', 'r') as handle: 
    reader = csv.reader(handle) 

    for row in reader: 
     agencies[row[2]].append(row[0]) 

現在,agencies包含郵政編碼到機構的映射。

+0

@grich:這是'csv'的問題。我從來沒有見過它,所以這裏有[噸Google結果](https://www.google.com/search?q=Error:+new-line+character+seen+in+unquoted+field+-+對於那個確切的問題,你需要+ + + +打開+ +文件+ + +通用 - 換行+模式&#= 100&hl = en&safe = off&tbo = u&tbm = dsc&sa = X&ei = JTzGULSADcKCyAGi2IHgAw&ved = 0CEUQmAcwAQ&ved = 0CEUQmAcwAQ&bi = 1440&bih = 799)。 – Blender

+0

明白了。謝謝! – geraldarthur

+0

如何將列表寫入單個單元格?編寫者只是想將列表中的每個項目分隔成不同的單元格。 – geraldarthur

2

下面是一個使用模擬數據的R解決方案的草圖:

set.seed(123) 
dat <- data.frame(agency = sample(letters[1:15],100,replace = TRUE), 
        zipcode = sample(15,100,replace = TRUE)) 

head(dat) 

#A base R solution 
aggregate(dat$agency, 
      by = list(dat$zipcode), 
      FUN = function(x){paste(x,collapse = ",")}) 

#Or using the populat plyr package 
library(plyr) 
ddply(dat, 
     .(zipcode), 
     summarise, 
     agencies = paste(agency,collapse = ",")) 

數據的屏幕截圖通常不表現出最有用的東西。一個完整的,最小可重現的例子將允許更直接有用的更完整的答案。 (並且導致您的後續問題減少。)

+0

@grich joran對最小可重複性示例的評論非常重要。它大大增加了解決實際問題的完整答案的機會。 –

相關問題