6

I tried the following code to convert a column to "date":

df.['DATE'] =  pd.to_datetime(df['DATE'])

or

df.DATE =  pd.to_datetime(df.DATE)

but I get the following error:

/Users/xyz/anaconda3/envs/sensor/lib/python3.6/site-packages/pandas/core/indexing.py:517: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self.obj[item] = s

I changed the code to the following:

df.loc[:,'DATE'] =  pd.to_datetime(df.loc[:,'DATE'])

but I still get the same error.

same with this

for i in df.index:
    df.loc[i,'DATE'] =  pd.to_datetime(df.loc[i,'DATE'])
mallet
  • 2,185
  • 3
  • 32
  • 59

2 Answers2

6

You need add copy:

df = data.loc[data.ID == 79]

to:

df = data.loc[data.ID == 79].copy()

If you modify values in df later you will find that the modifications do not propagate back to the original data (data), and that Pandas does warning.

jezrael
  • 729,927
  • 78
  • 1,141
  • 1,090
2

The problem is in the code you have not shown us. Somewhere, you have done something like this:

df = other.loc[something]

That is the root cause of this error message. You need to assign using .loc or similar directly into the original DataFrame:

other.loc[something, 'DATE'] = whatever
John Zwinck
  • 223,042
  • 33
  • 293
  • 407