AttributeError module 'pandas' has no attribute 'DataFrame'

avatar
Borislav Hadzhiev

Last updated: Apr 8, 2024
8 min

banner

# Table of Contents

  1. AttributeError module 'pandas' has no attribute 'DataFrame'
  2. AttributeError module 'pandas' has no attribute 'read_csv'
  3. AttributeError module 'pandas' has no attribute 'Series'

# AttributeError module 'pandas' has no attribute 'DataFrame'

The Python "AttributeError module 'pandas' has no attribute 'DataFrame'" occurs when we have a local file named pandas.py or misspell DataFrame.

To solve the error, make sure to rename any local files named pandas.py.

attributeerror module pandas has no attribute dataframe

Here is an example of how the error occurs in a file called pandas.py.

pandas.py
import pandas as pd # ⛔️ AttributeError: module 'pandas' has no attribute 'DataFrame' df = pd.DataFrame( { "Name": [ "Alice", "Bob", "Carl", ], "Age": [29, 30, 31], } ) print(df)

The most likely cause of the error is having a local file named pandas.py which shadows the official pandas module.

Make sure you haven't misspelled DataFrame as class names are case-sensitive.

# Make sure to not name your file pandas.py

Make sure to rename your local file to something other than pandas.py to solve the error.

main.py
import pandas as pd # ✅ works df = pd.DataFrame( { "Name": [ "Alice", "Bob", "Carl", ], "Age": [29, 30, 31], } ) print(df)

dont name your file pandas py

Your file could be named main.py or any other name that doesn't clash with another module.

# Make sure your import statement is correct

Another thing to look out for is having an incorrect import statement.

In the example, we import the pandas module and alias it to pd, so we would access the DataFrame class as pd.DataFrame.

The Python interpreter first looks for the imported module in the built-in modules, then in the current directory, then in the PYTHON PATH, then in the installation-dependent default directory.

So, when we create a local file with the same name as that of a third-party module, we effectively shadow the official module with our local file.

You can access the __file__ property on the imported module to see whether it is shadowed by a local file.

main.py
import pandas as pd # ⛔️ The result is shadowed by a local file # /home/borislav/Desktop/bobbyhadz_python/pandas.py # ✅ The result is pulling in the correct module # /home/borislav/Desktop/bobbyhadz_python/venv/lib/python3.10/site-packages/pandas/__init__.py print(pd.__file__)

pulling in correct pandas module

A good way to start debugging is to print(dir(your_module)) and see what attributes the imported module has.

# Checking what attributes an imported object has

Here is what printing the attributes of the pandas module looks like when I have a file pandas.py in the same directory.

pandas.py
import pandas as pd # ['__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] print(dir(pd))

If you pass a module object to the dir() function, it returns a list of names of the module's attributes.

If you try to access any attribute that is not in this list, you will get the "AttributeError: module has no attribute".

We can see that the imported pandas module doesn't have DataFrame attribute, which makes it evident that we are shadowing the official pandas module with our local pandas.py file.

If you try to import the pandas module in a file called pandas.py, you would get a little different error message that means the same thing.

pandas.py
import pandas as pd # ⛔️ AttributeError: partially initialized module 'pandas' has no attribute 'DataFrame' (most likely due to a circular import) df = pd.DataFrame( { "Name": [ "Alice", "Bob", "Carl", ], "Age": [29, 30, 31], } )

Renaming your file solves the error.

  1. AttributeError module 'pandas' has no attribute 'read_csv'
  2. AttributeError module 'pandas' has no attribute 'Series'

# AttributeError module 'pandas' has no attribute 'read_csv'

The Python "AttributeError module 'pandas' has no attribute 'read_csv'" occurs when we have a local file named pandas.py or csv.py and try to import from the pandas module.

To solve the error, make sure to rename any local files named pandas.py.

attributeerror module pandas has no attribute read csv

Here is an example of how the error occurs in a file called pandas.py.

pandas.py
import pandas as pd # ⛔️ AttributeError: module 'pandas' has no attribute 'read_csv' df = pd.read_csv('employees.csv') print(df)

# Having a local file named pandas.py or csv.py

The most likely cause of the error is having a local file named pandas.py which shadows the official pandas module.

The error is also caused by having a local file named csv.py.

Make sure to rename your local file to something other than pandas.py to solve the error.

main.py
import pandas as pd df = pd.read_csv('employees.csv', sep=',', encoding='utf-8') # first_name last_name # 0 Alice Smith # 1 Bobby Hadz # 2 Carl Smith print(df)

read csv data successfully

The code sample above assumes that you have an employees.csv file that looks as follows.

employees.csv
first_name,last_name Alice,Smith Bobby,Hadz Carl,Smith

The employees.csv file and the main.py file should be located in the same directory.

# Having an incorrect import statement

Another thing to look out for is having an incorrect import statement.

The Python interpreter first looks for the imported module in the built-in modules, then in the current directory, then in the PYTHON PATH, then in the installation-dependent default directory.

So, when we create a local file with the same name as that of a third-party module, we effectively shadow the official module with our local file.

You can access the __file__ property on the imported module to see whether it is shadowed by a local file.

main.py
import pandas as pd # ⛔️ The result is shadowed by a local file # /home/borislav/Desktop/bobbyhadz_python/pandas.py # ✅ The result is pulling in the correct module # /home/borislav/Desktop/bobbyhadz_python/venv/lib/python3.10/site-packages/pandas/__init__.py print(pd.__file__)

A good way to start debugging is to print(dir(your_module)) and see what attributes the imported module has.

Here is what printing the attributes of the pandas module looks like when I have a file pandas.py in the same directory.

pandas.py
import pandas as pd # ['__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] print(dir(pd))

If you pass a module object to the dir() function, it returns a list of names of the module's attributes.

If you try to access any attribute that is not in this list, you will get the "AttributeError: module has no attribute".

We can see that the imported pandas module doesn't have read_csv attribute, which makes it evident that we are shadowing the official pandas module with our local pandas.py file.

If you try to import the pandas module in a file called pandas.py, you would get a little different error message that means the same thing.

pandas.py
import pandas as pd # ⛔️ AttributeError: partially initialized module 'pandas' has no attribute 'read_csv' (most likely due to a circular import) df = pd.read_csv('employees.csv') print(df)

Renaming your file solves the error.

# AttributeError module 'pandas' has no attribute 'Series'

The Python "AttributeError module 'pandas' has no attribute 'Series'" occurs when we have a local file named pandas.py or misspell Series (case-sensitive).

To solve the error, make sure to rename any local files named pandas.py.

attributeerror module pandas has no attribute series

Here is an example of how the error occurs in a file called pandas.py.

pandas.py
import pandas as pd d = {'a': 1, 'b': 2, 'c': 3} # ⛔️ AttributeError: module 'pandas' has no attribute 'Series' ser = pd.Series(data=d, index=['a', 'b', 'c']) print(ser)

# Make sure you don't name your file pandas.py

The most likely cause of the error is having a local file named pandas.py which shadows the official pandas module.

Make sure you haven't misspelled Series as class names are case-sensitive.

Make sure to rename your local file to something other than pandas.py to solve the error.

main.py
import pandas as pd d = {'a': 1, 'b': 2, 'c': 3} # ✅ works ser = pd.Series(data=d, index=['a', 'b', 'c']) print(ser)

The name of your local file should not clash with the name of a module.

Otherwise, the local module shadows the remote module which causes issues.

# Make sure your import statements are correct

Another thing to look out for is having an incorrect import statement.

In the example, we import the pandas module and alias it to pd, so we would access the Series class as pd.Series.

The Python interpreter first looks for the imported module in the built-in modules, then in the current directory, then in the PYTHON PATH, then in the installation-dependent default directory.

So, when we create a local file with the same name as that of a third-party module, we effectively shadow the official module with our local file.

You can access the __file__ property on the imported module to see whether it is shadowed by a local file.

main.py
import pandas as pd # ⛔️ The result is shadowed by a local file # /home/borislav/Desktop/bobbyhadz_python/pandas.py # ✅ The result is pulling in the correct module # /home/borislav/Desktop/bobbyhadz_python/venv/lib/python3.10/site-packages/pandas/__init__.py print(pd.__file__)

A good way to start debugging is to print(dir(your_module)) and see what attributes the imported module has.

Here is what printing the attributes of the pandas module looks like when I have a file pandas.py in the same directory.

pandas.py
import pandas as pd # ['__builtins__', '__cached__', '__doc__', '__file__', # '__loader__', '__name__', '__package__', '__spec__'] print(dir(pd))

If you pass a module object to the dir() function, it returns a list of names of the module's attributes.

If you try to access any attribute that is not in this list, you will get the "AttributeError: module has no attribute".

We can see that the imported pandas module doesn't have Series attribute, which makes it evident that we are shadowing the official pandas module with our local pandas.py file.

If you try to import the pandas module in a file called pandas.py, you would get a little different error message that means the same thing.

main.py
import pandas as pd d = {'a': 1, 'b': 2, 'c': 3} # ⛔️ AttributeError: partially initialized module 'pandas' has no attribute 'Series' (most likely due to a circular import) ser = pd.Series(data=d, index=['a', 'b', 'c']) print(ser)

Renaming your file solves the error.

# Additional Resources

You can learn more about the related topics by checking out the following tutorials:

I wrote a book in which I share everything I know about how to become a better, more efficient programmer.
book cover
You can use the search field on my Home Page to filter through all of my articles.