如何在不创建NaN的情况下处理数据框?

如何在不创建NaN的情况下处理数据框?

问题描述:

我有一组包含日期的列(从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

你是不是想算的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