Home > Back-end >  Why do i get all date similiar while trying to fill them in dataset?
Why do i get all date similiar while trying to fill them in dataset?

Time:05-20

I have dataset with 800 rows and i want to create new column with date, and in each row in should increase on one day.

import datetime
date = datetime.datetime.strptime('5/11/2011', '%d/%m/%Y')
for x in range(800):
    df['Date'] = date   datetime.timedelta(days=x)

In each column date is equal to '2014-01-12', as i inderstand it fills as if x is always equal to 799

CodePudding user response:

Each time through the loop you are updating the ENTIRE Date column. You see the results of the 800th update at the end.

You could use a date range:

dr = pd.date_range('5/11/2011', periods=800, freq='D')

df = pd.DataFrame({'Date': dr})
print(df)

          Date
0   2011-05-11
1   2011-05-12
2   2011-05-13
3   2011-05-14
4   2011-05-15
..         ...
795 2013-07-14
796 2013-07-15
797 2013-07-16
798 2013-07-17
799 2013-07-18

Or:

df['Date'] = dr

CodePudding user response:

pandas is nice tool which can repeate some calculations without using for-loop.

When you use df['Date'] = ... then you assign the same value to all cells in column.

You have to use df.loc[x, 'Date'] = ... to assign to single cell.

Minimal working example (with only 10 rows).

import pandas as pd
import datetime

df = pd.DataFrame({'Date':[1,2,3,4,5,6,7,8,9,0]})

date = datetime.datetime.strptime('5/11/2011', '%d/%m/%Y')

for x in range(10):
    df.loc[x,'Date'] = date   datetime.timedelta(days=x)
    
print(df)

But you could use also pd.date_range() for this.

Minimal working example (with only 10 rows).

import pandas as pd
import datetime

df = pd.DataFrame({'Date':[1,2,3,4,5,6,7,8,9,0]})

date = datetime.datetime.strptime('5/11/2011', '%d/%m/%Y')

df['Date'] = pd.date_range(date, periods=10)
    
print(df)
  • Related