2017-09-21 15 views
0

私のコードには、時間と分を含まず、日付のみを含むデータフレームの日付列に起因するバグがあります。私は問題の原因を、これら2つの機能を連続して実行するのか、それを1つずつ実行するのかによって追跡しました。私が関数を1つずつ実行すると問題はありません。両方を実行すると、私の結果は予期しないものになります。Pandas Datetime/dt.dateで予期しない動作が発生しました

これらの関数を連続して実行する必要がありますが、これらは互いに依存しません。私はPythonには新しいので、これは入力が上書きされていることが原因だと思っていました。(私が知る限り、Javaで起こったことではないでしょう)

def func1(dataset): 
    originalData = dataset 
    # only look at one day at a time- remove extra unnecessary info 
    originalData ['Date'] = pd.to_datetime(originalData ['Date']) 
    print dataset, 'test1' 
    originalData ['Date'] = originalData ['Date'].dt.date 
    print dataset, 'test2' 
    # other stuff 

def func2(dataset): 
    originalData2 = dataset 
    # look at entire datetime 
    originalData2['Date'] = pd.to_datetime(originalData2['Date']) 
    print originalData2 
    # other stuff  

を実行し、このように、私は第二の機能で時間を失う:だから、私は次のように機能を変更しました。このような

csv = pd.read_csv(csvFileName) 
func1(csv) 
func2(csv) 

ランは、私の所望の出力で関数func2結果:実行するとTEST2のプリントアウトのみ日付ながら

csv = pd.read_csv(csvFileName) 
func2(csv) 

奇妙なことは、日時と日付アウト関数func1、test1のプリントです。変更がoriginalDatasetに適用されても、データセットは変更されています。私は何かを誤解していますか?前もって感謝します。

答えて

1

基礎データに変更を加えたくない場合は、次のように関数内にデータを設定することをおすすめします。originalData = dataset.copy().このメソッドは深いコピーを提供します。つまり、基礎となるオブジェクトをオーバーライドしません。

奇妙な動作、はい。

また、データフレームのスライスを作成し、それらに変換を実行するときに実行することもできます。

+0

それを修正しました!ありがとう! –

関連する問題