2014-12-08 62 views
0

將行添加到熊貓數據幀讓df成爲pandas.DataFrame對象。假設se是一個pandas.Series對象。從系列

df的列是se的索引。

我想從sedf添加一個新行並將索引設置爲555

我使用的命令是df.loc[555]=se

它的作品,似乎?

我得到那個一個值試圖在DataFrame的一個片段的副本上設置一個錯誤/警告的

我明白了,我已閱讀文檔。

兩個問題,但:

  1. 我應該真正關心的警告?
  2. 什麼是推薦的方式去做這個,這樣的警告不會彈出?

謝謝。

+0

輸入數據和預期輸出的任何示例都是有用的。 – Marcin 2014-12-08 00:42:48

+0

感覺像一個很好的答案是沒有這個提供。 – user3659451 2014-12-08 18:39:37

回答

1
  1. 我應該真的關心警告嗎?

這取決於。在您的示例中,您首先引用數據的一個子集(df.loc[555]),然後在該子集上設置值。幾乎總是熊貓使原始數據的copy和副本上的設置值不會修改原始數據幀,因此警告。

在某些情況下,大熊貓會創建原始數據的view(例如:如果所有列都具有相同的dtype),則此處的設置值將按預期工作。

如果數據框中的所有列都具有相同的dtype(例如:所有浮點數),並且您在單個現有索引上使用iloc,那麼您將獲得一個視圖並且可以忽略該警告。如果您正在設置一個不存在的索引,則表示您是Setting with enlargment,這也是預期的行爲,警告也可以忽略。

  1. 什麼是推薦的方法去做到這一點,使警告不會彈出?

您使用的df.loc給你提供的信息似乎好。你有幾種選擇,以避免警告:

首先,更新您的熊貓版本。這些誤報警的情況在每個版本都有所改進,我在0.15.1中沒有收到任何信息。

其次,如果你確信你在做什麼是預期的行爲,那麼你可以只用沉默全球警告:

pd.set_option('chained_assignment', None) 

最後,在某些情況下,你可以設置你造成的is_copy財產對象有效地禁用這個檢查對象上,例如:

df_temp = df.loc[555] 
df_temp.is_copy = False 

注意,這個最後的選擇只能在現有的索引使用,在新的索引這就提出了一個KeyError