python-3.x - 在 Pandas 数据框中插入一行会将 NaN 转换为 NaT
问题描述
让我们从如下所示的数据框开始:
import datetime
import numpy as np
from dateutil import tz
from pandas import DataFrame
date1 = datetime.datetime(2021, 4, 1, 9, 15, 0, 0, tzinfo=tz.tzoffset(None, -5 * 60 * 60))
df = DataFrame({"date": [date1], "a": [1.0], "b": [2.0]})
在此数据框中,dtypes
是和。现在我需要将一行插入到另一个带有值的日期。我做了这样的事情:TimeStamp
float64
float64
NaN
date2 = date1 + timedelta(seconds=300)
row = {"date": date2, "a": np.nan, "b": np.nan}
df = df.append(row, ignore_index=True)
我的问题是这个新行是用NaT
s 而不是NaN
s 插入的。数据框dtypes
变成TimeStamp
,object
和object
. NaN
s 已转换为TimeStamp
s,这不是我所期望的。
任何想法为什么会发生这种情况以及如何避免它?我希望NaN
s 保持float
在我的数据框中。
我还尝试了以下方法:
date2 = date1 + timedelta(seconds=300)
row = {"date": np.nan, "a": np.nan, "b": np.nan}
df = df.append(row, ignore_index=True)
df.iloc[0, 1] = date2
这样做,我的数据框dtypes
变成object
,float64
和float64
. NaN
s 仍然是数字,但现在日期是纯object
s。
为了给出一些上下文,这个数据框是使用另一个连接到数据库的模块构建的,以提取两个日期之间的时间序列。这些系列中的日期有 5 分钟的间隔,但给定日期的数据可能会丢失。我必须NaN
在此数据框中插入多行 s 以查找缺失的日期。
提前致谢。
解决方案
解决此问题的另一种方法是首先将您的行转换为数据框:
date2 = date1 + timedelta(seconds=300)
row = {"date": date2, "a": np.nan, "b": np.nan}
df = df.append(pd.DataFrame([row]), ignore_index=True)
我不知道为什么首先会出现这个问题
推荐阅读
- angular - Observable List Non-Changing on parent - @Ionic5/angular12 - @Input + Modal + 嵌套组件
- c# - 日期选择器的弹出窗口显示错误的年份
- python - 使用 for 循环检查函数中的参数是否满足使用 for 循环的同一函数中的另一个参数
- php - 为什么 strtotime 返回带有一些奇怪字符串的日期?
- java - 尝试打开 word 文件或 excel 文件时未找到处理 Intent 的活动
- script - 打开时,我需要为默认工作表创建脚本 excel 365?
- flutter - 颤振休息 API
- powerapps-collection - 针对多个条件评估 powerapps 集合
- python - 在 Python 中使用 for 循环查找字符串中的重复字符:
- node.js - SyntaxError:await 仅在 async 函数中有效,但已包含 async