2017-10-05 10 views
3

私は崇高なテキストの出力に問題があります。私はこれを実行すると:昇華3の出力と出力の間の差

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 

誰かがそれが起こるどのような任意のアイデアがありますか?助けのための

おかげ

+0

いいえ、それは間違いではありません。 'df.assign(age = [30,31,32])'は***は実行されません***。したがって、 'df'にはまだ1つの列しかありません。あなたが 'jupyter'でそれを見る理由は、' jupyter'が実際に 'REPL'機能を持っているからです。崇高なことはしません。 'df = df.assign(age = [30,31,32])'とすると、両方でうまくいくでしょう。 – Abdou

答えて

2

これは、はるかに間違いや通訳の不一致いるからです。

df.assign(age =[30,31,32])に電話すると、dfのコピーと、追加の列ageが作成されます。これがREPL-likeエディタで実行されると、出力が表示されます。しかし、ほとんどのテキストエディタでは、出力を印刷していないため表示されません。 DataFrameオブジェクトの__repr__メソッドを使用しています。テキストエディタで__repr__出力をレンダリングする方法を実装していない限り、出力はdf.assign(age =[30,31,32])に決して表示されません。今

jupyterは、他の一方で、REPL機能を有しているため、print機能を呼び出すために必要とせずに、出力の__repr__法に基づいてコマンドを表示します。その結果、jupyterdf.assign(age =[30,31,32])の出力を示します。

最後の行は、データフレームを変更していないということです。どちらも崇高と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) 

私はこのことができます願っています。

0

新しいものに加えて、すべての元の列を持つ新しいオブジェクト(コピー)を返しデータフレームのassign()からpandas.DataFrame.assignを参照してください。

だから、その戻り値を取得するためにそれを割り当てる必要があり:

df = df.assign (age =[30,31,32]) 
関連する問題