2015-01-17 2 views
-3

У меня есть 2 CSV-файла. Один с названием города, населением и влажностью. Во вторых городах сопоставляются состояния. Я хочу получить государственную совокупную численность населения и среднюю влажность. Может кто-нибудь помочь? Вот пример:Анализ данных с использованием Python

CSV-1:

CityName,population,humidity 
Austin,1000,20 
Sanjose,2200,10 
Sacramento,500,5 

CSV-2:

State,city name 
Ca,Sanjose 
Ca,Sacramento 
Texas,Austin 

хотел бы получить выход (население суммы и средней влажности в течение состояния):

Ca,2700,7.5 
Texas,1000,20 
+3

У вас есть какой-либо код, который вы написали, чтобы мы могли вам помочь? – Tux

+0

Я использую panda и реализую функцию Sumif как функцию, но я понятия не имею, как сопоставить две данные csv-файла. Без использования циклов. В любом случае я могу это сделать. Спасибо за ответ – MEddy

+0

Положите код, который вы написали, чтобы мы могли его увидеть. Кроме того, есть ли у вас ограничение на использование циклов? – Tux

ответ

-1
def output(file1, file2): 

    f = lambda x: x.strip()  #strips newline and white space characters 

    with open(file1) as cities: 
     with open(file2) as states: 
      states_dict = {} 
      cities_dict = {} 

      for line in states: 
       line = line.split(',') 
       states_dict[f(line[0])] = f(line[1]) 
      for line in cities: 
       line = line.split(',') 
       cities_dict[f(line[0])] = (int(f(line[1])) , int(f(line[2]))) 

    for state , city in states_dict.iteritems(): 
     try: 
      print state, cities_dict[city] 
     except KeyError: 
      pass 

output(CSV1,CSV2) #these are the names of the files 

Это дает результат, который вы хотите д. Просто убедитесь, что названия городов в обоих файлах одинаковы с точки зрения капитализации.

0

Вышеупомянутое решение не работает, потому что словарь будет содержать одно ключевое значение. я сдался и, наконец, использовал петлю. ниже код работает, указанный ввод тоже

csv1           
     state_name,city_name     
     CA,sacramento 
     utah,saltlake 
     CA,san jose 
     Utah,provo 
     CA,sanfrancisco 
     TX,austin 
     TX,dallas 
     OR,portland 

CSV2 
    city_name population humidity 
    sacramento 1000 1 
    saltlake 300 5 
    san jose 500 2 
     provo 100 7 
    sanfrancisco 700 3 
    austin 2000 4 
    dallas 2500 5 
    portland 300 6 

def mapping_within_dataframe(self, file1,file2,file3): 
     self.csv1 = file1 
     self.csv2 = file2 
     self.outcsv = file3 
     one_state_data = 0 
     outfile = csv.writer(open('self.outcsv', 'w'), delimiter=',') 

     state_city = read_csv(self.csv1) 
     city_data = read_csv(self.csv2) 

     all_state = list(set(state_city.state_name)) 

     for one_state in all_state: 

      one_state_cities = list(state_city.loc[state_city.state_name == one_state, "city_name"]) 
      one_state_data = 0 

      for one_city in one_state_cities: 
       one_city_data = city_data.loc[city_data.city_name == one_city, "population"].sum() 
       one_state_data = one_state_data + one_city_data 

      print one_state, one_state_data 

      outfile.writerows(whatever) 
Смежные вопросы