Python Forum
Error When Trying To Read CSV File
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Error When Trying To Read CSV File
#1
Hello everyone,

I'm just learning Python for the first time and am going through the tutorial on Learnpython.org. I'm getting this weird error. I don't think I'm writing anything wrong. I'm guessing this is a bug in my version of Python? Should I downgrade to another version?

import pandas as pd

# cars = {'cars_per_cap': [809, 731, 588, 18, 200, 70, 45], 'country': ['United States', 'Australia', 'Japan', 'India', 'Russia', 'Morocco', 'Egypt'], 'drives_right': ['true', 'false', 'false', 'false', 'true', 'true', 'true']}

cars = pd.read_csv('cars.csv')
print(cars['country'])
Error:
Traceback (most recent call last): File "C:\Users\kaega\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\indexes\base.py", line 3361, in get_loc return self._engine.get_loc(casted_key) File "pandas\_libs\index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc File "pandas\_libs\index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc File "pandas\_libs\hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item File "pandas\_libs\hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item Traceback (most recent call last): File "c:\Users\kaega\Documents\Programming\Python Learning Environment\script.py", line 6, in <module> print(cars['country']) File "C:\Users\kaega\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\frame.py", line 3458, in __getitem__ indexer = self.columns.get_loc(key) File "C:\Users\kaega\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\indexes\base.py", line 3363, in get_loc raise KeyError(key) from err KeyError: 'country'
I'm using Python 3.10.0 downloaded from Python.org.
I'm using Visual Studio Code.
Not sure if this matters, but I do have Mingw64 installed as well.
Reply
#2
Before thinking about a bug I'd make sure the data matches your expectations.

What do you get for the following? Does it match the column names that you expect?

import pandas as pd
cars = pd.read_csv('cars.csv')
print(list(cars.keys()))
Reply
#3
I wrote this:
import pandas as pd

cars = pd.DataFrame({'cars_per_cap': [809, 731, 588, 18, 200, 70, 45], 'country': ['United States', 'Australia', 'Japan', 'India', 'Russia', 'Morocco', 'Egypt'], 'drives_right': ['true', 'false', 'false', 'false', 'true', 'true', 'true']})
cars.to_csv('cars.csv')
cars2 = pd.read_csv('cars.csv')
print(cars2['country'])
It produces this output:
Output:
0 United States 1 Australia 2 Japan 3 India 4 Russia 5 Morocco 6 Egypt Name: country, dtype: object
The csv file looks like this:
Output:
,cars_per_cap,country,drives_right 0,809,United States,true 1,731,Australia,false 2,588,Japan,false 3,18,India,false 4,200,Russia,true 5,70,Morocco,true 6,45,Egypt,true
Not everything is necessary. and the CSV file doesn't need underscores instead of spaces. I edited the CSV file to look like this:
Output:
cars per cap,country,drives right 809,United States,true 731,Australia,false 588,Japan,false 18,India,false 200,Russia,true 70,Morocco,true 45,Egypt,true
And ran this program:
import pandas as pd
print(pd.read_csv('cars.csv')['country'])
And it produced this output:
Output:
0 United States 1 Australia 2 Japan 3 India 4 Russia 5 Morocco 6 Egypt Name: country, dtype: object
I then modified the CSV file to look like this:
Output:
cars per cap, country, drives right 809,United States,TRUE 731,Australia,FALSE 588,Japan,FALSE 18,India,FALSE 200,Russia,TRUE 70,Morocco,TRUE 45,Egypt,TRUE
And I get this error:
Error:
Traceback (most recent call last): File "...", line 2, in <module> print(pd.read_csv('cars.csv')['country']) File "...\lib\site-packages\pandas\core\frame.py", line 3455, in __getitem__ indexer = self.columns.get_loc(key) File "...\lib\site-packages\pandas\core\indexes\base.py", line 3363, in get_loc raise KeyError(key) from err KeyError: 'country'
The dataframe keys are 'cars per cap', ' country', and ' drives right'. The blank I inserted to make the CSV file look pretty is being interpreted as a leading blank in the key name. Could this be your error?
Reply
#4
(Dec-03-2021, 06:21 PM)deanhystad Wrote: I wrote this:
import pandas as pd

cars = pd.DataFrame({'cars_per_cap': [809, 731, 588, 18, 200, 70, 45], 'country': ['United States', 'Australia', 'Japan', 'India', 'Russia', 'Morocco', 'Egypt'], 'drives_right': ['true', 'false', 'false', 'false', 'true', 'true', 'true']})
cars.to_csv('cars.csv')
cars2 = pd.read_csv('cars.csv')
print(cars2['country'])
It produces this output:
Output:
0 United States 1 Australia 2 Japan 3 India 4 Russia 5 Morocco 6 Egypt Name: country, dtype: object
The csv file looks like this:
Output:
,cars_per_cap,country,drives_right 0,809,United States,true 1,731,Australia,false 2,588,Japan,false 3,18,India,false 4,200,Russia,true 5,70,Morocco,true 6,45,Egypt,true
Not everything is necessary. and the CSV file doesn't need underscores instead of spaces. I edited the CSV file to look like this:
Output:
cars per cap,country,drives right 809,United States,true 731,Australia,false 588,Japan,false 18,India,false 200,Russia,true 70,Morocco,true 45,Egypt,true
And ran this program:
import pandas as pd
print(pd.read_csv('cars.csv')['country'])
And it produced this output:
Output:
0 United States 1 Australia 2 Japan 3 India 4 Russia 5 Morocco 6 Egypt Name: country, dtype: object
I then modified the CSV file to look like this:
Output:
cars per cap, country, drives right 809,United States,TRUE 731,Australia,FALSE 588,Japan,FALSE 18,India,FALSE 200,Russia,TRUE 70,Morocco,TRUE 45,Egypt,TRUE
And I get this error:
Error:
Traceback (most recent call last): File "...", line 2, in <module> print(pd.read_csv('cars.csv')['country']) File "...\lib\site-packages\pandas\core\frame.py", line 3455, in __getitem__ indexer = self.columns.get_loc(key) File "...\lib\site-packages\pandas\core\indexes\base.py", line 3363, in get_loc raise KeyError(key) from err KeyError: 'country'
The dataframe keys are 'cars per cap', ' country', and ' drives right'. The blank I inserted to make the CSV file look pretty is being interpreted as a leading blank in the key name. Could this be your error?

THAT IS TOTALLY MY ERROR! Thank you for being so thorough!

No spaces between commas and the next entry. Got it. Thanks so much!!
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Recommended way to read/create PDF file? Winfried 3 2,895 Nov-26-2023, 07:51 AM
Last Post: Pedroski55
  python Read each xlsx file and write it into csv with pipe delimiter mg24 4 1,458 Nov-09-2023, 10:56 AM
Last Post: mg24
  read file txt on my pc to telegram bot api Tupa 0 1,127 Jul-06-2023, 01:52 AM
Last Post: Tupa
  parse/read from file seperated by dots giovanne 5 1,115 Jun-26-2023, 12:26 PM
Last Post: DeaD_EyE
  Formatting a date time string read from a csv file DosAtPython 5 1,288 Jun-19-2023, 02:12 PM
Last Post: DosAtPython
  How do I read and write a binary file in Python? blackears 6 6,643 Jun-06-2023, 06:37 PM
Last Post: rajeshgk
  Read csv file with inconsistent delimiter gracenz 2 1,203 Mar-27-2023, 08:59 PM
Last Post: deanhystad
  Read text file, modify it then write back Pavel_47 5 1,616 Feb-18-2023, 02:49 PM
Last Post: deanhystad
  Correctly read a malformed CSV file data klllmmm 2 1,963 Jan-25-2023, 04:12 PM
Last Post: klllmmm
  How to read csv file update matplotlib column chart regularly SamLiu 2 1,068 Jan-21-2023, 11:33 PM
Last Post: SamLiu

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020