Pandas,转换日期时间列格式会更改列类型

Pandas, converting date time column format's changes the column type

我有一个数据框,我在其中将对象列转换为 DateTime 列。

def insert_cows_to_db():
    df = pd.read_csv('/home/yovel/PycharmProjects/scr/rivendell/dairyPlanExample.csv')
    df['DOB'] = pd.to_datetime(df['DOB'])
    print(df)
    print(df.dtypes)

输出:

        Cow   Transponder        DOB
0       NaN           NaN        NaT
1       8.0  9.840007e+14 2016-09-13
2       9.0  9.840007e+14 2014-07-09
3      13.0  9.840007e+14 2015-02-22
4      16.0  9.840007e+14 2014-02-17

Cow                   float64
Transponder           float64
DOB            datetime64[ns]

现在我想更改列的日期格式,但是当我使用时:

def insert_cows_to_db():
    df = pd.read_csv('/home/yovel/PycharmProjects/scr/rivendell/dairyPlanExample.csv')
    df['DOB'] = pd.to_datetime(df['DOB']).dt.strftime('%d-%m-%Y')
    print(df)
    print(df.dtypes)

输出

        Cow   Transponder         DOB
0       NaN           NaN         NaN
1       8.0  9.840007e+14  13-09-2016
2       9.0  9.840007e+14  09-07-2014
3      13.0  9.840007e+14  22-02-2015
4      16.0  9.840007e+14  17-02-2014

Cow            float64
Transponder    float64
DOB             object

有没有办法保存日期时间对象因为我随后将此数据上传到 Django 中的数据库并且那里的字段需要 DateTime 对象(如果我理解正确的话)

尝试上传到 Django 的数据库时出错

    match = date_re.match(value)
TypeError: expected string or bytes-like object

您可以通过 :

在 pandas 中将日期转换为字符串
df['DOB'].apply(lambda x: x.strftime('%Y-%m-%d'))

然后使用 :

将其转换回 Django 日期时间字段
datetime.datetime.strptime(s, "%Y-%m-%d").date()