2016-12-10 40 views
1

我想使用熊貓將列的類型轉換爲int。這裏的源代碼:如何避免熊貓中的SettingWithCopyWarning?

# CustomerID is missing on several rows. Drop these rows and encode customer IDs as Integers. 
cleaned_data = retail_data.loc[pd.isnull(retail_data.CustomerID) == False] 
cleaned_data['CustomerID'] = cleaned_data.CustomerID.astype(int) 

這就提出瞭如下警告:

SettingWithCopyWarning:值是試圖從一個數據幀上 片的副本設置

如何我可以避免這種警告嗎?有沒有更好的方式將CustomerID的類型轉換爲int?我在python 3.5上。

+1

可能重複:http://stackoverflow.com/q/38809796/190597 – unutbu

回答

2

在一個loc使用它:

retail_data.loc[~retail_data.CustomerID.isnull(),'CustomerID'] = retail_data.loc[~retail_data.CustomerID.isnull(),'CustomerID'].astype(int) 

例子:

import pandas as pd 
import numpy as np 

retail_data = pd.DataFrame(np.random.rand(4,1)*10, columns=['CustomerID']) 
retail_data.iloc[2,0] = np.nan 
print(retail_data) 

    CustomerID 
0 9.872067 
1 5.645863 
2   NaN 
3 9.008643 

retail_data.loc[~retail_data.CustomerID.isnull(),'CustomerID'] = retail_data.loc[~retail_data.CustomerID.isnull(),'CustomerID'].astype(int) 

     CustomerID 
0   9.0 
1   5.0 
2   NaN 
3   9.0 

你會發現列的D型還是浮動的,因爲np.nan不能編碼在int列中。

如果你真的想在不改變基礎retail_data刪除這些行,使實際copy()

cleaned_data = retail_data.loc[~retail_data.CustomerID.isnull()].copy()