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,454
  • 3
  • 37
  • 64

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
  • 822,522
  • 95
  • 1,334
  • 1,252
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
  • 239,568
  • 38
  • 324
  • 436