2017-10-20 21 views
2

首先,我做了當一個int類型的pd.DataFrame全部更換-1to np.NaN,有的成爲的int浮法

a = [[6,5,4,3,2],[1,2,3,4,5,6],[3,4,5,6]] 
b = pd.DataFrame(a) 
print(b.head(2)) 

輸出是

1 2 3 4 5  6 
6 5 4 3 2.00 NaN 
1 2 3 4 5.00 6.00 
3 4 5 6 NaN NaN 

所以,我沒有

a = [[6,5,4,3,2],[1,2,3,4,5,6],[3,4,5,6]] 
b = pd.DataFrame(a).fillna(-1).astype(int) 
print(b.head(2)) 

輸出成爲

1 2 3 4 5 6 
6 5 4 3 2 -1 
1 2 3 4 5 6 
3 4 5 6 -1 -1 

但我不希望這些-1,所以我也

a = [[6,5,4,3,2],[1,2,3,4,5,6],[3,4,5,6]] 
b = pd.DataFrame(a).fillna(-1).astype(int) 
b = b.replace(-1, np.NaN) 
print(b.head(2)) 

輸出是第一次

1 2 3 4 5  6 
6 5 4 3 2.00 NaN 
1 2 3 4 5.00 6.00 
3 4 5 6 NaN NaN 
+0

見與南https://stackoverflow.com/questions/21287624/convert-pandas-column-containing-nans-to-dtype-in​​t列不能進行整型。 – Zero

+0

@零在那裏*必須*是一個更好的欺騙目標,但我找不到一個atm ... –

回答

2

因此再次相同:

>>> type(np.nan) 
float 

如果您的列中有NaN s,則列的其餘部分會自動上傳到float以進行有效的計算。

要解決這個問題,轉換到dtypeobject,我不建議除非這只是用於顯示目的(你殺了效率這種方式)。

m = b.dtypes == type(np.nan) 
b.loc[:, m] = b.loc[:, m].astype(object) 

print(b) 
    0 1 2 3 4 5 
0 6 5 4 3 2 NaN 
1 1 2 3 4 5 6 
2 3 4 5 6 NaN NaN 

print(b.dtypes) 
0  int64 
1  int64 
2  int64 
3  int64 
4 object 
5 object 
dtype: object 
相關問題