Append/Replace a row in a pandas DataFrame [SOLVED]

Peter Otten __peter__ at web.de
Thu Apr 14 03:11:38 EDT 2016


Paulo da Silva wrote:

> Às 21:10 de 13-04-2016, Paulo da Silva escreveu:
>> Hi all.
> ...
> 
>> [6 rows x 4 columns]
>> 
>>> dft=pd.DataFrame([[1,2,3,4]],
>> index=[datetime.date(2016,1,12)],columns=df.columns)
>> 
>>> dft
>>             A  B  C  D
>> 2016-01-12  1  2  3  4
>> 
>> [1 rows x 4 columns]
>> 
>>> pd.concat([df,dft])
>> Out[71]:
>>                             A         B         C         D
>> 2013-01-01 00:00:00 -0.111621  1.126761 -2.420517  0.660948
>> 2013-01-02 00:00:00 -0.243397 -0.975684 -0.679209 -0.656913
>> 2013-01-03 00:00:00  0.405816  0.478353  0.621906 -0.262615
>> 2013-01-04 00:00:00 -0.380249  0.416711 -0.906286  1.828339
>> 2013-01-05 00:00:00  0.772747  0.993784  0.452746  1.665306
>> 2013-01-06 00:00:00  0.535011 -0.662874  1.504281  0.543537
>> 2016-01-12           1.000000  2.000000  3.000000  4.000000
>> 
>> [7 rows x 4 columns]
>> 
>> Why am I getting the second column?!
> I need to use for example pd.datetime instead of datetime.date. In fact
> there is no extra col but the inclusion of hour in the index.
> Still don't understand why!

It looks like handling of datetime objects is specialised

>>> pd.DataFrame([[1,2]], index=[datetime.datetime.now()], columns=["foo", 
"bar"]).index
<class 'pandas.tseries.index.DatetimeIndex'>
[2016-04-14 08:51:09.192283]
Length: 1, Freq: None, Timezone: None

and assumes the "all-midnight" case to mean that no time of day was provided 
whereas date is handled like a generic object

>>> pd.DataFrame([[1,2]], index=[datetime.date.today()], columns=["foo", 
"bar"]).index
Index([2016-04-14], dtype='object')

and triggers usage of the string conversion provided by the entries.
For datetime this includes the time that you mistook for an extra column.

>>> str(datetime.datetime(2010, 12, 21))
'2010-12-21 00:00:00'
>>> str(datetime.date(2010, 12, 21))
'2010-12-21'

>> How do I do to have a row replaced instead of added if its date (index)
>> is an existent one?
> df.loc[<the index>]=<the new/replacement list/tuple line>
> 
> Paulo
> 





More information about the Python-list mailing list