从 pandas 中的字典和路径组合中提取数据时出错
Error when pull data from dictionary and path-combine in pandas
我尝试从 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
我认为您不需要先经历所有使用 csv 模块读取文件的麻烦。您还重新分配了 csvReader 两次,因此在您读完 csv 文件后,前两个文件(芝加哥和纽约)不会被任何内容引用。
下面是pandas读取多个文件并合并成一个文件的方法:
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,从而为我们留下一个 DataFrame 列表。此外,我们使用 .assign()
方法添加一个包含文件名的列。我们这样做是为了在将 DataFrame 组合在一起之后,我们仍然可以区分哪一行来自哪个文件。
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
]
现在我们可以继续将所有 DataFrame 合并为一个 DataFrame。
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,但从未在代码中的任何地方定义它。
我尝试从 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
我认为您不需要先经历所有使用 csv 模块读取文件的麻烦。您还重新分配了 csvReader 两次,因此在您读完 csv 文件后,前两个文件(芝加哥和纽约)不会被任何内容引用。
下面是pandas读取多个文件并合并成一个文件的方法:
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,从而为我们留下一个 DataFrame 列表。此外,我们使用 .assign()
方法添加一个包含文件名的列。我们这样做是为了在将 DataFrame 组合在一起之后,我们仍然可以区分哪一行来自哪个文件。
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
]
现在我们可以继续将所有 DataFrame 合并为一个 DataFrame。
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,但从未在代码中的任何地方定义它。