Ошибка при извлечении данных из словаря и объединении путей в пандах - PullRequest
0 голосов
/ 28 мая 2018

Я пытался получить данные из 3 городов.Как я могу прочитать все 3 городских данных вместо чтения одного за другим ниже?Есть ли у меня дублированный код для чтения данных ниже?Как читать данные из словаря, чтобы избежать ошибки?Большое спасибо.

import csv
with open('C:\\Users\\jasch\\chicago.csv') as chicago_data:
    csvReader = csv.reader(chicago_data)

import csv
with open('C:\\Users\\jasch\\new_york_city.csv') as new_york_data:
    csvReader = csv.reader(new_york_data)

import csv
with open('C:\\Users\\jasch\\washington.csv') as washington_data:
    csvReader = csv.reader(washington_data)

import time
import pandas as pd
import numpy as np

CITY_DATA = { 'chicago': 'chicago.csv',
              'new york city': 'new_york_city.csv',
              'washington': 'washington.csv' }

df = pd.read_csv(CITY_DATA[city])

df['Start Time'] = pd.to_datetime(df['Start Time'])
df['month'] = df['Start Time'].dt.month
print (df['month'])

NameError                                 Traceback (most recent call last)
<ipython-input-16-b1588646f194> in <module>()
      7               'washington': 'washington.csv' }
      8 
----> 9 df = pd.read_csv(CITY_DATA[city])
     10 
     11 df['Start Time'] = pd.to_datetime(df['Start Time'])

NameError: name 'city' is not defined

3.CSV-файлы с городскими данными имеют почти такие же имена столбцов, как показано ниже.

     Start Time             End Time  Trip Duration  \
0  2017-05-29 18:36:27  2017-05-29 18:49:27            780   
1  2017-06-12 19:00:33  2017-06-12 19:24:22           1429   
2  2017-02-13 17:02:02  2017-02-13 17:20:10           1088   
3  2017-04-24 18:39:45  2017-04-24 18:54:59            914   
4  2017-01-26 15:36:07  2017-01-26 15:43:21            434   

              Start Station                          End Station  \
0     Columbus Dr & Randolph St                 Federal St & Polk St   
1        Kingsbury St & Erie St  Orleans St & Merchandise Mart Plaza   
2         Canal St & Madison St              Paulina Ave & North Ave   
3  Spaulding Ave & Armitage Ave       California Ave & Milwaukee Ave   
4        Clark St & Randolph St         Financial Pl & Congress Pkwy   

    User Type  Gender  Birth Year  
0  Subscriber    Male      1991.0  
1    Customer     NaN         NaN  
2  Subscriber  Female      1982.0  
3  Subscriber    Male      1966.0  
4  Subscriber  Female      1983.0   

1 Ответ

0 голосов
/ 28 мая 2018

Я думаю, вам не нужно сначала проходить через чтение файлов в модуле csv.Вы также переназначаете csvReader два раза, поэтому первые два файла (Чикаго и Нью-Йорк) не упоминаются ничем после того, как вы закончили чтение в файлах csv.

Ниже представлен способ чтения панд в нескольких файлах и объединения их в один файл:

import pandas as pd
import os

city_data_files = ['C:\\Users\\jasch\\chicago.csv','C:\\Users\\jasch\\new_york_city.csv', 'C:\\Users\\jasch\\washington.csv']

В этой строке ниже мы перебираем список путей к файлам и создаем DataFrame.для каждого, оставляя нам список DataFrames.Кроме того, мы используем метод .assign(), чтобы добавить столбец с именем файла.Мы делаем это так, после объединения DataFrames вместе мы можем все еще сказать, какая строка пришла из какого файла.

dfs = [
       pd.read_csv(city_data_file, parse_dates=['Start Time'])\
       .assign(filename=os.path.basename(city_data_file)) 
       for city_data_file in city_data_files
       ]

Теперь мы можем пойти дальше и объединить все фреймы данных в один фрейм данных.

df = pd.concat(dfs) # this line combines the contents of the files 
df['month'] = df['Start Time'].dt.month

Что касается вашей ошибки - трассировка стека точно сообщает вам, в чем заключается проблема:

----> 9 df = pd.read_csv(CITY_DATA[city])
NameError: name 'city' is not defined

Вы используете переменную city, но никогда не определяли ее нигде в своем коде.

...