如何在不创建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 "")
你是不是想算的NaN? 如果是的话,你可以这样做:
len(df.loc[:, df.isnull().any()])
我看到你提到的“空白”,因为它是从Excel正在添加,所以你可以做的是运行上面使用命令之前,把这些空白到楠:
df['CDR-Form'].replace('', np.NaN,inplace=True)
这最终为我工作。 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
那么,你要么有日期,要么你有一个列中的对象。你有没有想过把“看笔记”翻译成假日期,比如1970-01-01?因为现在你尝试混合字符串,日期和NaN。我宁愿混合日期和NaN。因为这就是熊猫所支持的。 – mkastner