【问题标题】:DIfference between output of sublime 3 vs jupytersublime 3 与 jupyter 的输出之间的差异
【发布时间】:2017-10-05 15:14:53
【问题描述】:

我对 sublime 文本的输出有疑问。当我运行这个时:

import pandas as pd
import numpy as np


df = pd.DataFrame()
df['name'] = ['John', 'Steve', 'Sarah']
df.assign (age =[30,31,32])
print (df) 

我得到这个结果:

        name
    0   John
    1  Steve
    2  Sarah

我认为这是一个错误,因为我应该可以看到年龄列。

当我在 jupyter 中运行此代码时,我得到:

    name    age
0   John    30
1   Steve   31
2   Sarah   32

有人知道发生了什么吗?

感谢您的帮助

【问题讨论】:

  • 不,这不是一个错误。 df.assign(age =[30,31,32]) 是未就地完成。所以df 仍然只有一列。您在jupyter 中看到它的原因是因为jupyter 实际上具有REPL 功能。崇高没有。如果你这样做,它会在这两种情况下都起作用:df = df.assign(age =[30,31,32]).

标签: python sublimetext3


【解决方案1】:

这绝不是错误或解释器不匹配。

当您调用df.assign(age =[30,31,32]) 时,您正在制作df 的副本,其中包含一个附加列age。在REPL-like 编辑器中完成此操作后,您会看到呈现的输出。但是在大多数文本编辑器中,这不会显示,因为您没有打印输出。您正在使用 DataFrame 对象的 __repr__ 方法。除非文本编辑器实现了渲染__repr__ 输出的方法,否则您将永远看不到df.assign(age =[30,31,32]) 的输出。

现在,另一方面,jupyter 具有REPL 功能,因此将根据输出的__repr__ 方法显示命令,而无需调用print 函数。结果,jupyter 将显示df.assign(age =[30,31,32]) 的输出。

底线仍然是您没有更改数据框。 sublime 和jupyter 都会打印结果,如果代码写成如下:

import pandas as pd
import numpy as np


df = pd.DataFrame()
df['name'] = ['John', 'Steve', 'Sarah']
df = df.assign(age=[30,31,32])
print(df)

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    数据框的assign()返回一个新对象(副本),除了新列之外,还包含所有原始列 - 请参阅pandas.DataFrame.assign。

    所以你必须分配它以获得它的返回值:

    df = df.assign (age =[30,31,32])
    

    【讨论】:

      猜你喜欢
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多