gpt4 book ai didi

python - 使用来自 django shell 的 pandas 在 Django 中批量创建

转载 作者:行者123 更新时间:2023-12-01 09:29:21 25 4
gpt4 key购买 nike

我正在尝试从 django shell 运行脚本来从 csv 批量创建数据库。我不确定是我的 pandas 错了还是我的 django 模型有问题。我正在使用 Python3,我不确定这是否会影响事情。我在 django 文档中迷失了方向

我想从kaggle导入此csv:https://www.kaggle.com/weil41/flights/data

脚本:

    import pandas as pd
from .models import Flight

data = pd.read_csv('data/Flights.csv', sep=',')

# year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,
# carrier,tailnum,flight,origin,dest,air_time,distance,hour,min
flights = [
Flight(
year = data.ix[row]['year'],
month = data.ix[row]['month'],
day = data.ix[row]['day'],
dep_time = data.ix[row]['dep_time'],
dep_delay = data.ix[row]['dep_delay'],
arr_time = data.ix[row]['arr_time'],
arr_delay = data.ix[row]['arr_delay'],
cancelled = data.ix[row]['cancelled'],
carrier = data.ix[row]['carrier'],
tailnum = data.ix[row]['tailnum'],
flight = data.ix[row]['flight'],
origin = data.ix[row]['origin'],
dest = data.ix[row]['dest'],
air_time = data.ix[row]['air_time'],
distance = data.ix[row]['distance'],
hour = data.ix[row]['hour'],
min = data.ix[row]['min'],
)
for row in data
]
Flight.objects.bulk_create(flights)

模型.py

from django.db import models

# year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,
# carrier,tailnum,flight,origin,dest,air_time,distance,hour,min

class Flight(models.Model):
year = models.CharField(max_length=100, default='')
month = models.CharField(max_length=100, default='')
day = models.CharField(max_length=100, default='')
dep_time = models.CharField(max_length=100, default='')
arr_time = models.CharField(max_length=100, default='')
arr_delay = models.CharField(max_length=100, default='')
cancelled = models.CharField(max_length=100, default='')
carrier = models.CharField(max_length=100, default='')
tailnum = models.CharField(max_length=100, default='')
flight = models.CharField(max_length=100, default='')
origin = models.CharField(max_length=100, default='')
dest = models.CharField(max_length=100, default='')
air_time = models.CharField(max_length=100, default='')
distance = models.CharField(max_length=100, default='')
hour = models.CharField(max_length=100, default='')
min = models.CharField(max_length=100, default='')

def __str__(self):
return f'{self.flight} {self.dest} {self.year} {self.month} {self.day}'

我得到的错误是 KeyError: "'name' not in globals"?

错误消息:

exec(open('calendarapp/get_data.py').read()) Traceback (most recent call last): File "", line 1, in File "", line 2, in KeyError: "'name' not in globals"

最佳答案

参见this question对于类似的情况。

根据那里的解决方案,您可以尝试更改导入语句

from .models import Flight

from [app_name].models import Flight

就您而言,这似乎会导致:

from calendarapp.models import Flight
<小时/>

编辑:我建议更改您的迭代程序。

flights = [
Flight(
year = row['year'],
...
)
for i, row in df.iterrows()]
Flight.objects.bulk_create(flights)

注意我如何使用pandas iterrows ,这使得代码更具可读性。

您可以通读this post了解如何使用 .ix 的一些上下文(或者为什么不使用它)。

此外,bulk_create尚不处理 ID 字段的创建(如果它不是 Postgres)。

关于python - 使用来自 django shell 的 pandas 在 Django 中批量创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50102423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com