2017-10-19 62 views
0

我有一個數據幀,看起來是這樣的:大熊貓適用於如預期各列的作品,而不是整個數據幀

pd.DataFrame({'state':['AL','AL'],'statefp':[1.0,1.0]}) 
    state statefp 
0 AL  1.0 
1 AL  1.0 

我想將整個數據框進式STR和使用.apply方法是。我想要做的是如果該項目的類型爲浮點數,我想將其存儲爲一個字符串整數,如果它已經是一個字符串我想小寫它。我已經試過這樣:

df.apply(lambda x: '{:.0f}'.format(x) if isinstance(x,float) else x.astype(str).str.lower()) 

其輸出這個(不是我,因爲statefp想存儲爲一個字符串浮動):

state statefp 
0 al  1.0 
1 al  1.0 

然而,當我用同樣適用於只是該列,它工作正常:

>>>df.statefp.apply(lambda x: '{:.0f}'.format(x) if isinstance(x,float) else x.astype(str).str.lower()) 
0 1 
1 1 

我失去了一些關於如何.apply正在對整個數據幀?我也嘗試了設置的參數axis='columns',但是這也不起作用。

此外,我願意嘗試其他代碼,而不僅僅是.apply

回答

0

嘗試使用D型,而不是:

df.apply(lambda x: x.astype(int).astype(str) if x.dtype==np.float else x.astype(str).str.lower()) 

輸出:

state statefp 
0 al  1 
1 al  1 

df.info() 

<class 'pandas.core.frame.DataFrame'> 
RangeIndex: 2 entries, 0 to 1 
Data columns (total 2 columns): 
state  2 non-null object 
statefp 2 non-null object 
dtypes: int32(1), object(1) 
memory usage: 104.0+ bytes 
+0

你知道,如果''dtype'的np.NaN'是'np.float'? 'statefp'列中有一些'NaN',它拋出這個錯誤:'不能將NA轉換爲整數','indexfoundation statefp' – LMc

+0

@LMc是的,np.Nan被認爲是np.float。 'type(np.nan)== np.float'返回True –