首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将熊猫datetime64转换成被Django认可为DateField的东西?

问如何将熊猫datetime64转换成被Django认可为DateField的东西?
EN

Stack Overflow用户
提问于 2021-08-19 18:49:57
回答 1查看 93关注 0票数 0

当我使用熊猫加载Excel时,包含日期的列被正确地标识为datetime64

代码语言:javascript
复制
excel_table = pd.read_excel(path, sheet_name=ws_name, header=2) 
print(excel_table['Start Date'])

# output:
0       2001-01-31
1       2001-03-02
2       2001-07-23
3       2001-07-25
4       2002-03-11
...
Name: Start Date, Length: 11056, dtype: datetime64[ns]

然后,我将excel_table写到一个sqlite3数据库中:

代码语言:javascript
复制
excel_table.to_sql(table_name, cols_to_use, index=False)

当我使用PRAGMA table_info(TABLENAME)检查列时,我得到了以下内容:

代码语言:javascript
复制
...
11|Start Date|NUM|0||0
...

不是应该是TIMESTAMP而不是NUM吗

然后,我使用Django的inspectdb方法生成一个模型类,它给了我以下内容:

代码语言:javascript
复制
# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#   * Rearrange models' order
#   * Make sure each model has one field with primary_key=True
#   * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior
#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from django.db import models


class TableName(models.Model):

    start_date = models.TextField(db_column='Start Date', blank=True, null=True)  # Field name made lowercase. Field renamed to remove unsuitable characters. This field type is a guess.


    class Meta:
        managed = False
        db_table = 'TableName'

现在,它是一个TextField而不是一个DateField,这是有问题的,因为我试图在本专栏中实现过滤和排序功能(例如,在2020-12-31之后的过滤日期,等等)。

我在哪里犯了错误,我该如何改正?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-19 19:00:36

在start_date中,将 DateField 字段声明为DateField(或 DateTimeField**)** )。

datetime64数据类型的数据将自动转换为修正的类型为MySQL或SQLite。

在serializers.py中,添加以下行:

代码语言:javascript
复制
from rest_framework import serializers

start_date = serializers.DateTimeField(format="%Y-%m-%d")

旧答案

也许您可以尝试将datetime64转换为python并导出到数据库:

代码语言:javascript
复制
df['Start Date'] = df['Start Date'].dt.to_pydatetime()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68853164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档