0

I have a DataFrame in which the first column contains information in the form of a date and time.

But for me this information is not recognized correctly.

When I took information from the database and sent the data to the DataFrame table, it looks like I "swapped places" - "day" and "month". "Day" and "month" are reversed - the day value must be the same value as the month. "Month" and "day" are reversed - the month value must be a day value. How can I flip and make the day be like a month, and the month like a day?

In a DataFrame table, a column is recognized as a type - datetime. But the recognition of the month and day is wrong - they are swapped.

How to swap month and day values in a DataFrame?

now the date time is being recognized so
df['datetime'] = pd.to_datetime(df["datetime"].dt.strftime('%Y-%m-%d'))

and the real location of the month and day is
df['datetime'] = pd.to_datetime(df["datetime"].dt.strftime('%Y-%d-%m'))

-- before

      id            datetime  temp_narvoz   q_virob   
0      1 2023-01-02 10:00:00          1.4  0.688331  
1      2 2023-01-02 11:00:00          1.4  0.800867  
2      3 2023-01-02 12:00:00          1.4  0.810746 
3      4 2023-01-02 13:00:00          1.4  0.805522  
4      5 2023-01-02 14:00:00          2.1  0.802979 



1   Jan. 2, 2023, 10 a.m.   1.4 0.6883313373044648  
2   Jan. 2, 2023, 11 a.m.   1.4 0.8008674575779552  
3   Jan. 2, 2023, noon  1.4 0.8107462069822856  
4   Jan. 2, 2023, 1 p.m.    1.4 0.8055222730239303  
5   Jan. 2, 2023, 2 p.m.    2.1 0.8029786055112401  
6   Jan. 2, 2023, 3 p.m.    2.1 0.7854097839013776  
7   Jan. 2, 2023, 4 p.m.    2.1 0.7950360149694395  
8   Jan. 2, 2023, 5 p.m.    1.6 0.8296386761628508  
9   Jan. 2, 2023, 6 p.m.    1.6 0.83005095964985    
10  Jan. 2, 2023, 7 p.m.    1.6 0.8569995535066821  
11  Jan. 2, 2023, 8 p.m.    -0.5    0.8710515387962285  
12  Jan. 2, 2023, 9 p.m.    -0.5    0.864164249456128   
13  Jan. 2, 2023, 10 p.m.   -0.5    0.8514567681549778  
14  Jan. 2, 2023, 11 p.m.   0.3 0.8078847547912567  
15  Feb. 2, 2023, midnight  0.3 0.7834063591629548  

-- after

      id            datetime  temp_narvoz   q_virob   
0      1 2023-02-01 10:00:00          1.4  0.688331  
1      2 2023-02-01 11:00:00          1.4  0.800867  
2      3 2023-02-01 12:00:00          1.4  0.810746 
3      4 2023-02-01 13:00:00          1.4  0.805522  
4      5 2023-02-01 14:00:00          2.1  0.802979 



1   Feb. 1, 2023, 10 a.m.   1.4 0.6883313373044648  
2   Feb. 1, 2023, 11 a.m.   1.4 0.8008674575779552  
3   Feb. 1, 2023, noon  1.4 0.8107462069822856  
4   Feb. 1, 2023, 1 p.m.    1.4 0.8055222730239303  
5   Feb. 1, 2023, 2 p.m.    2.1 0.8029786055112401  
6   Feb. 1, 2023, 3 p.m.    2.1 0.7854097839013776  
7   Feb. 1, 2023, 4 p.m.    2.1 0.7950360149694395  
8   Feb. 1, 2023, 5 p.m.    1.6 0.8296386761628508  
9   Feb. 1, 2023, 6 p.m.    1.6 0.83005095964985    
10  Feb. 1, 2023, 7 p.m.    1.6 0.8569995535066821  
11  Feb. 1, 2023, 8 p.m.    -0.5    0.8710515387962285  
12  Feb. 1, 2023, 9 p.m.    -0.5    0.864164249456128   
13  Feb. 1, 2023, 10 p.m.   -0.5    0.8514567681549778  
14  Feb. 1, 2023, 11 p.m.   0.3 0.8078847547912567  
15  Feb. 1, 2023, midnight  0.3 0.7834063591629548  
FObersteiner
  • 22,500
  • 8
  • 42
  • 72
Ridsen
  • 13
  • 2

1 Answers1

0
import pandas as pd

df = pd.DataFrame({'date': ['11/02/2022', '12/02/2023', '13/02/2023']})

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

df['date'] = df['date'].apply(lambda x: x.replace(day=x.month, 
month=x.day))
print(df)
  • Thanks a lot! You just helped me out a lot. Now everything is displayed as it should. This is incredible, I already thought that I could not fix it. Thanks a lot! – Ridsen Feb 16 '23 at 10:33
  • 2
    You should parse the dates correctly in the first place, not "correct" it afterwards with some hack. Either provide a `format` or set `dayfirst=True`. – FObersteiner Feb 16 '23 at 10:40