2017-10-09 5 views
0

(Excelファイルからインポートされた)日付を含む一連の列があり、次のように処理する必要があります。どのようにNaNを作成せずにデータフレームを処理するのですか?

これらの列のセルが空白の場合は、これは私にすべての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)列の中には、日付や空白ではなく、「see notes」という値があります。それは、欠落しているアイテムを適切に説明するためには「ノートを参照する」ことが不可欠であり、セルが空であると見なされないようにする必要があります。実際の問題は、上記の.isnullコードの前にこのコードを実行すると、evryの空白がNaNまたはnanまたはNaTになり、その後にNO/NOフラグがNULL /欠落として表示されることです。

これは、日付文字列をトリミングして "ノートを参照"を文字列に変更するためのコードです。そうでないと、出力で空白になります。

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]) 

私の問題は、列のdtypesとは関係があると思います。私は、印刷(df.dtypes)を実行すると、すべての列は1を除いて、私はこれを具体的に使用してintに設定し、「オブジェクト」として示しています

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

これは私のために働いてしまった。 【dateColumns] df_combinedにおけるCに対する ':df_combined [C] = df_combined [C] .astype(STR) がdf_combined [C] = np.where(df_combined [C] .str.contains( "20") df_combined [c] .str [:10]、df_combined [c]) ' – Korzak

関連する問題