Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么我在向这个Dataframe添加部分行时获得的是NaT值而不是NaN?

为什么我在向这个Dataframe添加部分行时获得的是NaT值而不是NaN?
EN

Stack Overflow用户
提问于 2022-05-29 12:44:53
回答 3查看 89关注 0票数 1

我有一个脚本,它将一个.csv文件读取到一个数据中,然后允许用户通过向它添加额外的数据来扩展它。它将接受date列中的最后一个值,并开始逐日提示用户输入一个值。

如果用户没有为input指定任何内容,则将该值转换为math.nan。除非我将行附加到dataframe,否则假定的NaN将被转换为NaT

我在下面重新创建了一个可复制的示例。

如何确保我的NaN不被转换为NaTs?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python

import pandas as pd
import datetime as dt
import math

df = pd.DataFrame({
    'date': pd.to_datetime(['2022-05-01', '2022-05-02', '2022-05-03']),
    'weight': [250., 249, 247],
})

last_recorded_date = df['date'].iloc[-1]
next_date = last_recorded_date + dt.timedelta(days=1)
df.loc[len(df.index)] = [next_date, math.nan]

print(df)
#         date weight
# 0 2022-05-01  250.0
# 1 2022-05-02  249.0
# 2 2022-05-03  247.0
# 3 2022-05-06    NaT
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-05-29 14:20:39

list中设置行时,首先将列表转换为SeriesSeries的元素必须是相同的类型;第一个值是datetime;因此每个值都在结果Series中转换为datetime。特别是,math.nan变成了NaT。熊猫不使用现有的列类型来通知进程,而是根据需要对列类型进行调整-- weight列的类型从float扩展到object

从我的测试来看,使用元组似乎解决了这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.loc[len(df.index)] = (next_date, math.nan)
票数 1
EN

Stack Overflow用户

发布于 2022-05-29 13:35:26

这太奇怪了。但一些实验揭示了一些线索:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = pd.DataFrame({
    'date': pd.to_datetime(['2022-05-01', '2022-05-02', '2022-05-03']),
    'weight': [250., 249, 247],
    })

# Try this
df.loc[4] = None

提出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.

这并不能确切地解释为什么它将NaT添加到第二列中,但它确实表明在将类型附加到现有的dataframe时需要指定这些类型。

here所解释的,有一种解决方案如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = pd.DataFrame({
    'date': pd.to_datetime(['2022-05-01', '2022-05-02', '2022-05-03']),
    'weight': [250., 249, 247],
    })

next_date = pd.Timestamp('2022-05-04')
df = df.append(pd.DataFrame([{'date': next_date, 'weight': np.nan}]), ignore_index=True)
assert (df.dtypes.values == ('<M8[ns]', 'float64')).all()

然而,这就提出了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
  df = df.append(pd.DataFrame([{'date': next_date, 'weight': np.nan}]), ignore_index=True)

所以我想正确的解决办法是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_row = pd.DataFrame([{'date': next_date, 'weight': np.nan}])
df = pd.concat([df, new_row]).reset_index(drop=True)
assert (df.dtypes.values == ('<M8[ns]', 'float64')).all()

但我必须问,你为什么要以这种方式附加到一个数据文件中呢?这是相当低效的,如果可能的话应该避免。

票数 1
EN

Stack Overflow用户

发布于 2022-05-29 13:30:31

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import datetime as dt
import math

df = pd.DataFrame({
    'date': pd.to_datetime(['2022-05-01', '2022-05-02', '2022-05-03']),
    'weight': [250., 249, 247],
    })

last_recorded_date = df['date'].iloc[-1]

while True:
    next_date = last_recorded_date + dt.timedelta(days=1)
    weight = input(f"{next_date}: ")
    if weight == 'q':
        break
    elif weight == '':
        weight = math.nan
    else:
        weight = float(weight)

    df.loc[len(df.index)] = [next_date, weight]
    last_recorded_date = next_date

df = df['weight'].replace(pd.NaT, math.nan)

print(df)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72427164

复制
相关文章
为什么我在 Linux 上使用 exa 而不是 ls?
我们生活在一个繁忙的世界里,当我们需要查找文件和数据时,使用 ls 命令可以节省时间和精力。但如果不经过大量调整,默认的 ls 输出并不十分舒心。当有一个 exa 替代方案时,为什么要花时间眯着眼睛看黑白文字呢?
用户1880875
2021/09/06
2K0
为什么是AUC值而不是GSEA来挑选转录因子呢
通过学习,我们知道这个RcisTarget包内置的motifAnnotations_hgnc是16万行,可以看到每个基因有多个motif。而且下载好的 hg19-tss-centered-10kb-7species.mc9nr.feather 文件,也是 24453个motifs的基因排序信息。但是我们留下来了一个悬念,如何从几万个注释结果里面挑选到最后100个富集成功的motif呢?
生信技能树
2020/12/03
1.2K0
为什么是AUC值而不是GSEA来挑选转录因子呢
在应用开发中,我为什么选择 Flutter 而不是 React Native ?
作为一位开发人员,我想在本文中与大家聊聊跨平台开发领域的两大核心选项——Flutter 与 React Native 框架,并介绍我自己为什么更偏爱 Flutter。
逆锋起笔
2021/01/28
3.3K0
为什么 useState 返回的是 array 而不是 object?
这里可以看到 useState 返回的是一个数组,那么为什么是返回数组而不是返回对象呢?我们在自定义 hook 时应该返回什么类型呢?
小鑫
2022/04/26
2.3K0
为什么是int main()而不是void main()
这是基于我们学校老师一直使用void main(),而发的感慨,大一学习C语言时,我就在想,老师上课演示的为什么一直用void main(),而不是int main()呢?不为了偷懒?还是习惯性的语句呢?在查阅了部分大牛的博客,翻阅了C Primer Plus和C++ Primer Plus这两本圣经级别的书本之后,得出以下结论(有一部分是别人的结论,属于半转载),可能不太严谨,请多多包涵。
对弈
2019/09/04
3.7K0
为什么我应该使用指针而不是对象本身
对于现代 C++ (尤其是 C++ 11 之后),大量使用 new 动态分配是不明智的选择。
ClearSeve
2022/02/10
1.4K0
我为什么推荐大家使用 Nginx 而不是 Apache?
最后Nginx和Apache的差异总结成一句话就是:“Nginx适合处理静态请求和反向代理,Apache适合处理动态请求”。但这个差异化只有在请求量达到一定的阈值时表现差异才能表现出来,对于 WordPress 、 Typecho 等等这里动态站点来说某一天流量达到这个阈值的时候,还可以部署LNMPA这样的生产环境来应对和解决。所以流量阈值需求不到的时候,选择Nginx是性价比最好的选择了。
明月登楼的博客
2019/05/15
2.5K0
我为什么推荐大家使用 Nginx 而不是 Apache?
lodash源码分析之NaN不是NaN
暗恋之纯粹,在于不求结果,完全把自己锁闭在一个单向的关系里面。 ——梁文道《暗恋到偷窥》 本文为读 lodash 源码的第五篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash gitbook也会同步仓库的更新,gitbook地址:pocket-lodash 本篇分析的是 eq 函数。 作用与用法 eq 函数用来比较两个值是否相等。遵循的是 SameValueZero 规范。 var obj1 = {test: 1} var obj2 = {test: 1} var obj3 =
对角另一面
2018/03/30
1.9K0
lodash源码分析之NaN不是NaN
本文为读 lodash 源码的第五篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash
对角另一面
2018/01/17
1.8K0
【SaaS云】SaaS洞察(01):为什么在SaaS市场我选择美国而不是中国?
本文是“洞察:SaaS”系列文章之一,是该系列的第一篇文章。 很多朋友问我为什么不在中国创办 SaaS 公司。中国是一个大市场,你是中国人。在中国,你知道如何经营企业,如何适应当地文化。在中国创业有很多好处。 长期以来,全世界都习惯于从硅谷模仿。美国硅谷一直走在全球科技潮流的前沿。来自世界各地的人们来到美国学习新技术和商业模式,然后在自己的国家实施。然而,随着世界变得更加全球化,越来越多的科技公司在亚洲和欧洲如雨后春笋般涌现,许多外国人将在美国开展业务以进行全球竞争。如果公司的产品好,应该可以在最大的市
架构师研究会
2022/03/18
7260
为什么 wait/notify/notifyAll 在 Object 类定义而不是 Thread 类?
作者:Yujiaao 来源:segmentfault.com/a/1190000019962661
Java技术栈
2020/06/16
1.5K0
小白建站我为什么更推荐使用WordPress而不是typecho?
很多人在选择博客站时总是纠结使用WordPress还是typecho,亦或是像emlog,hexo,zblog等等,大多数大佬都是推荐typecho,一致意见是wp博客臃肿,那么,wp占地大吗?对的。但我还是推荐使用wp建站,下面说说我的看法。
深白鸭
2023/03/12
1.4K0
小白建站我为什么更推荐使用WordPress而不是typecho?
Pandas数据处理4、DataFrame记录重复值出现的次数(是总数不是每个值的数量)
Pandas数据处理4、DataFrame记录重复值出现的次数(是总数不是每个值的数量)
红目香薰
2023/02/17
2.4K0
Pandas数据处理4、DataFrame记录重复值出现的次数(是总数不是每个值的数量)
为什么 build 方法放在 State 中而不是在 StatefulWidget 中
为什么 build 方法放在 State 中而不是在 StatefulWidget 中呢?其中前2点是源代码的注释中给出的原因,最后一点是我的一点个人理解。
老孟Flutter
2021/01/28
9240
【JS】332- 为什么我更喜欢对象而不是 switch 语句
最近(或者不是最近,这完全取决于您什么时候阅读这边文章),我正在跟我的团队伙伴讨论如何去处理这种需要根据不同的值去处理不同的情况的方法,通常对于这种情况下,人们喜欢使用 switch 语句或者使用很多 if 搭配 else if 条件。在本文中我将重点介绍第三种方式 (我更为喜欢的方法),即使用对象进行快速地查找。
pingan8787
2019/08/29
1.3K0
为什么 Docker 和 Kubernetes 是用 Go 写的而不是 C# ?
这是 Reddit 平台上面这几天一篇比较热门的帖子, 非常有意思,本文我列出了几个高赞的回答。
全球技术精选
2022/09/05
1.1K0
Pandas数据处理1、DataFrame删除NaN空值(dropna各种属性值控制超全)
        这个女娃娃是否有一种初恋的感觉呢,但是她很明显不是一个真正意义存在的图片,我们需要很复杂的推算以及各种炼丹模型生成的AI图片,我自己认为难度系数很高,我仅仅用了64个文字形容词就生成了她,很有初恋的感觉,符合审美观,对于计算机来说她是一组数字,可是这个数字是怎么推断出来的就是很复杂了,我们在模型训练中可以看到基本上到处都存在着Pandas处理,在最基础的OpenCV中也会有很多的Pandas处理,所以我OpenCV写到一般就开始写这个专栏了,因为我发现没有Pandas处理基本上想好好的操作图片数组真的是相当的麻烦,可以在很多AI大佬的文章中发现都有这个Pandas文章,每个人的写法都不同,但是都是适合自己理解的方案,我是用于教学的,故而我相信我的文章更适合新晋的程序员们学习,期望能节约大家的事件从而更好的将精力放到真正去实现某种功能上去。本专栏会更很多,只要我测试出新的用法就会添加,持续更新迭代,可以当做【Pandas字典】来使用,期待您的三连支持与帮助。
红目香薰
2023/02/17
4.1K0
Pandas数据处理1、DataFrame删除NaN空值(dropna各种属性值控制超全)
重要的是图表思维,而不是工具
很久没有作图了,主要是一时找不到应该练手的案例。 然后昨天逛网易数独栏目的数据新闻,看到一幅还不错的案例,对于我来说值得一试,然后就手痒给照葫芦画瓢弄出来了。(主要是其中涉及到的细节处理很麻烦) 当然过程是花了些时间的,主要是需要慢慢打磨其中的细节,需要利用很多技术来处理图形版面的交接位置。 令我感触最深的是,想要用ggplot2随心所欲的画图,ggplot2掌握的再熟练,也只是勉强过的了技术关,而图表背后的思维和结构更考验人,更具有挑战性。 好在我学习R语言之前,就已经利用Excel临摹了大量的高难度信息
数据小磨坊
2018/04/11
9170
重要的是图表思维,而不是工具
SPC控制图为什么是±3σ,而不是±2σ或±4σ?
SPC控制图就是一个预警系统,预警系统都存在两类风险:第一类风险是误报警风险(第一类错误)α,第二类风险是漏报警风险(第二类错误)β。
用户9972271
2022/11/01
4870
Java里面Join(),为什么等待的是主线程,而不是当前子线程?
​ 当我们想要一个线程插队执行的时候,我们可能会使用到thread.join();。这个会让子线程先于主线程执行完毕,然后才开始执行子线程。但是仔细一想,发现这个明明调用的是子线程的join()方法,按道理应该子线程等待执行才是,为什么反而是主线程等待了呢?相关的示例代码如下:
Dream城堡
2021/03/20
8210

相似问题

pandas.NaT的字符串表示有时是"nan“而不是"NaT”。

14

为什么我在尝试向添加列时获得np.NaN值?

23

为什么我得到的是NaN而不是变量?

10

为什么我只在调试时获得值,而不是在执行时?

10

为什么我的线性回归得到的是NaN值,而不是学习?

138
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文