2017-10-09 137 views
0

我有一組包含日期的列(從Excel文件導入),我需要按如下方式處理它們:如何在不創建NaN的情況下處理數據框?

如果其中一列中的單元格爲空白,請將另一列設置爲1,否則,列是0.這允許我總結所有的1,並顯示這些項目丟失。

這就是我正在做的,目前:

df_combined['CDR_Form_notfound'] = np.where(df_combined['CDR-Form'].mask(df_combined['CDR-Form'].str.len()==0).isnull(),1,0) 

我有一個問題是,我必須格式化這些列,使A)日期進行修整,只顯示日/月/年和B)其中一些列的值爲「看到註釋」,而不是日期或空白。 「看筆記」對於正確計算遺漏物品至關重要,它必須在那裏才能防止單元格被標記爲空,並將物品計數丟失(增加「空白單元格」數量)。實際的問題是,如果我在上面的.isnull代碼之前運行此代碼,evry空白變爲NaN或nan或NaT,然後沒有標誌爲空/丟失。

這是我用來修剪日期字符串的代碼,並將「看筆記」更改爲一個字符串...因爲否則它只是在輸出中空白。

for c in df_combined[dateColumns]: 
     df_combined[c] = df_combined[c].astype(str) # uncomment this if columns change from dtype=str 
     df_combined[c] = np.where(df_combined[c].str.contains("20"), df_combined[c].str[:10], df_combined[c]) 
     df_combined[c] = np.where(df_combined[c].str.contains("see notes"), df_combined[c].str, df_combined[c]) 

我想我的問題可能與列的dtype有關。當我運行打印(df.dtypes),每列顯示爲「對象」,除了一個我專門設置以此來詮釋:

df_combined['Num'] = df_combined['Num'].apply(lambda x: int(x) if x == x else "") 
+0

那麼,你要麼有日期,要麼你有一個列中的對象。你有沒有想過把「看筆記」翻譯成假日期,比如1970-01-01?因爲現在你嘗試混合字符串,日期和NaN。我寧願混合日期和NaN。因爲這就是熊貓所支持的。 – mkastner

回答

0

你是不是想算的NaN? 如果是的話,你可以這樣做:

len(df.loc[:, df.isnull().any()]) 

我看到你提到的「空白」,因爲它是從Excel正在添加,所以你可以做的是運行上面使用命令之前,把這些空白到楠:

df['CDR-Form'].replace('', np.NaN,inplace=True) 
+0

這最終爲我工作。 df_combined [c] = df_combined [c] .type(str) df_combined [c] = np.where(df_combined [c] .str.contains(「20」), df_combined [c] .str [:10],df_combined [c])' – Korzak

相關問題