Python: 数据在数据框中显示为“None”

3

我正在尝试将表格中的数据提取到数据框中,但是在这样做时,我只看到了“None”,而没有看到我在表格中输入的原始值/数据。附上的代码如下:

conditions = [
(ontime['DepDelay'] <= 0),
(ontime['DepDelay'] >= 0)
]
values = ['2', '1']
ontime['DelayStatus'] = np.select(conditions, values)
pd.DataFrame(ontime)

enter image description here

然而,从表'ontime'中提取数据时,它显示为“None”,而不是值“1”或“2”。
q4 = c.execute('''
SELECT ontime.Origin AS Origin,
   ontime.Dest AS Dest,
   ontime.DayOfMonth AS DayOfMonth,
   ontime.Month AS Month,
   ontime.Year AS Year,
   ontime.ArrDelay AS ArrivalDelay,
   ontime.DepDelay AS DepDelay,
   ontime.DelayStatus AS DelayStatus
FROM ontime
WHERE ontime.Cancelled='0' AND
  ontime.ArrDelay > '0' AND
  ontime.ArrDelay != 'Na' AND
  ontime.DepDelay != 'Na'
GROUP BY Origin, Dest, DayOfMonth,Month,Year
ORDER BY Year ASC, Month ASC, DayOfMonth ASC
''').fetchall()
q4 = pd.DataFrame (q4, columns['OriginCountry','Destination','DayOfMonthArrive','MonthArrive','YearArrive','ArrivalDelay','DepDelay','DelayStatus'])
pd.DataFrame(q4)

尽管我不确定是否已将类从字符串更改为整数,但仍然获得值“None”。

enter image description here


3
第一个代码片段中的np是什么意思?第二个中的c呢?返回值中的None表示该列在数据库中具有NULL值。建议首先使用像pgadmin或dbeaver这样的数据库客户端检查数据库表格,以确定它们是否具有您认为它们具有的数据。 - Code-Apprentice
2
好的。你的第一个片段展示了你在DataFrame中创建DelayStatus作为一个计算字段。这不会影响数据库表本身。你是想要改变数据库本身吗? - Tim Roberts
2
@Code-Apprentice,它们几乎肯定使用了numpy和一些数据库游标(可能来自SQLAlchemy),但它们仍然应该指出正在使用哪些! - ti7
@Code-Apprentice 是的,正如ti7所提到的,谢谢!我会研究一下数据库客户端。 - Wen Qing
@Tim Robert,是的,那正是我一开始打算做的事情,也就是在数据库中添加一个新列,但我意识到上述代码可能只适用于 df 而不是 db,感谢您指出。 - Wen Qing
@WenQing 或者你可以像在numpy中一样,在SQL语句中计算该值。 - Code-Apprentice
1个回答

1
第一个代码片段计算了名为“DelayStatus”的数据帧中列的值。它从未将该值保存回数据库。因此,当您直接进行SQL查询时,仍然会得到None,因为基础数据库列具有NULL
根据我所见,您至少有两个选项:
1. 您可以只使用已计算出“DelayStatus”的数据帧进行进一步处理。 2. 您可以编写SQL代码,更新每行中的DelayStatus列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接