Home > Software engineering >  datetime strptime converts 10 to 01?
datetime strptime converts 10 to 01?

Time:10-31

I am working with a date column in this form:

Date
1871.01
1871.02
...
1871.10
1871.11

So to convert the column to a datetimeindex, I use:
df["Date"].apply(lambda x: datetime.strptime(str(x), "%Y.%m"))
however the column is converted to:

Date
1871-01-01
1871-02-01
...
1871-01-01
1871-11-01

Does anyone have any idea of what causes this, where all "10"s convert to "01"s? Is there a better way to do this given my inputs are floats?

CodePudding user response:

If the first format is a float, the 1871.10 and 1871.1 are exactly the same numbers. So the string of it will have the second value (the shortest one). But then it would seems it is January (month 1).

So you should stringify forcing two digits:

df["Date"].apply(lambda x: datetime.strptime("{:.2f}" % x, "%Y.%m"))

Note: the first format is very bad. The true solution is to correct it from beginning (e.g. when you read the input file you must tell the read function that the column is a date, not a float.

  • Related