python - 如何将 pandas datetime64 转换为可以被 Django 识别为 DateField 的东西?
问题描述
当我使用熊猫加载 Excel 时,包含日期的列被正确识别为datetime64
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 数据库:
excel_table.to_sql(table_name, cols_to_use, index=False)
当我使用 检查列时PRAGMA table_info(TABLENAME)
,我得到了这个:
...
11|Start Date|NUM|0||0
...
不应该是TIMESTAMP
而不是NUM
吗?
然后,我使用 Django 的inspectdb
方法生成了一个模型类,它给了我这个:
# 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'
现在,它是 aTextField
而不是 a DateField
,这是有问题的,因为我正在尝试在此列上实现过滤和排序功能(例如过滤 2020-12-31 之后的日期等)。
我在哪里犯了错误,我该如何解决?
解决方案
在 models.py 中,将start_date
字段声明为DateField
(或DateTimeField
)
datetime64
数据框的 dtype 将自动转换为 MySQL 或 SQLite 的更正类型。
在 serializers.py 中,添加以下行:
from rest_framework import serializers
start_date = serializers.DateTimeField(format="%Y-%m-%d")
旧答案:
也许您可以尝试将其转换datetime64
为 python 日期时间并导出到数据库:
df['Start Date'] = df['Start Date'].dt.to_pydatetime()
推荐阅读
- laravel - 如何从 laravel 中的控制器操作返回刀片组件
- apache-kafka - S3 kafka 连接状态 api 总是返回未找到状态码
- c# - 如何将 xml 对象反序列化回类列表
- google-search - Robot.txt 特定页面的规则
- python - 当我调用 pyautogui 命令时,tkinter 不断崩溃
- django - Django APP Heroku Log 检测重复请求
- powershell - 在 Windows 资源管理器中渲染 Powershell 结果
- c++ - 我试图实现合并排序,但无法找到我的代码的确切问题。程序没有显示错误,但我没有得到想要的输出
- time-complexity - 当实际时间复杂度是阶跃函数时,为什么二分搜索的时间复杂度为 O(log n)?
- arrays - 汇编语言索引寻址 (NASM)