Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"AttributeError: 'DataFrame' object has no attribute 'dtype'" using pandas to_datetime

I have been using Python 2.7.13 on a windows machine to write my code. But I am now trying to run my code on a Unix cluster using Python 2.7.12-goolf-2015a. When I run my code on the cluster with 2.7.12, I encounter an error in the pandas function to_datetime which does not occur using 2.7.13.

The error occurs when I try to convert a date entries in a dataframe to datetime.

df = pd.DataFrame({'year': [2015, 2016],
                       'month': [2, 3],
                       'day': [4, 5]})
pd.to_datetime(df)

Here is an example ot the error I get with the to_datetime command

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/easybuild/software/Python/2.7.12-goolf-
2015a/lib/python2.7/site-packages/pandas-0.16.1-py2.7-linux-
x86_64.egg/pandas/tseries/tools.py", line 343, in to_datetime
return _convert_listlike(arg, box, format)
File "/usr/local/easybuild/software/Python/2.7.12-goolf-
2015a/lib/python2.7/site-packages/pandas-0.16.1-py2.7-linux-
x86_64.egg/pandas/tseries/tools.py", line 266, in _convert_listlike
if com.is_datetime64_ns_dtype(arg):
File "/usr/local/easybuild/software/Python/2.7.12-goolf-
2015a/lib/python2.7/site-packages/pandas-0.16.1-py2.7-linux-
x86_64.egg/pandas/core/common.py", line 2513, in is_datetime64_ns_dtype
tipo = _get_dtype(arr_or_dtype)
File "/usr/local/easybuild/software/Python/2.7.12-goolf-
2015a/lib/python2.7/site-packages/pandas-0.16.1-py2.7-linux-
x86_64.egg/pandas/core/common.py", line 2458, in _get_dtype
return arr_or_dtype.dtype
File "/usr/local/easybuild/software/Python/2.7.12-goolf-
2015a/lib/python2.7/site-packages/pandas-0.16.1-py2.7-linux-
x86_64.egg/pandas/core/generic.py", line 2083, in __getattr__
(type(self).__name__, name))
AttributeError: 'DataFrame' object has no attribute 'dtype'

The to_datetime works when I load Python/3.5.2-intel-2016.u3, but that causes other problems. I am inexperienced with Unix operating systems and as I don’t have admin rights to software on the cluster, I am pretty tied to using 2.7.12

like image 592
Emma Avatar asked Oct 27 '25 21:10

Emma


2 Answers

This works for me on the current version of pandas:

pd.to_datetime(df)

0   2015-02-04
1   2016-03-05
dtype: datetime64[ns]

Pandas to_datetime has special support to parse a datetime column from a supplied DataFrame input iff it contains specifically "year", "month" and "day" columns (order doesn't matter, and case sensitivity doesn't either).

It's likely you're working with a much older version of pandas in which case I'd recommend an upgrade!


However...
If upgrading isn't an option, you can always join the columns and call to_datetime on the Series. Try joining the columns and then applying pd.to_datetime.

pd.to_datetime(df[['year', 'month', 'day']].astype(str).apply('-'.join, 1))

0   2015-02-04
1   2016-03-05
dtype: datetime64[ns]
like image 68
cs95 Avatar answered Oct 29 '25 11:10

cs95


DataFrame.dtypes is an attribute to list data types, for series it's a dtype.

reference: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dtypes.html

like image 22
Coddy Avatar answered Oct 29 '25 10:10

Coddy



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!