Navigation

Related Articles

Back to Latest Articles

pandasで読み込んだCSVの値がNaNだったときの対処方法


press
pandasで読み込んだCSVの値がNaNだったときの対処方法

DjangoのWEBプリケーションでCSVをpandasで読み込んでforで一行ずつループ処理をしたところ、毎回決まったところで決まったエラーが出たのでPyCharmのデバッグ機能を使って原因を調べた内容です。

プログラムはCSVから読み込んだ文字列が既にデータベースにあるか調べて、存在しなければ処理をして保存するといった内容です。メインの処理は以下のコードの”# 通常の処理”以降に始まりますが、内容とは関係が薄いので今回は割愛します。

最初のコード

import pandas as pd
from information.models import Information


def text_information(request):
    datasets = pd.read_csv("/csv/title.csv", encoding="utf_8")

    for title in datasets.TITLE:
        title_count = Information.objects.filter(title=title).count()

        if title_count < 1:
            # 通常の処理      

CSVのデータが欠損していたり、空白だったりすると読み込んだデータがNaNになってしまいます。上記のコードでは受け取ったtitleが存在するかどうかを判定するので、NaNというtitleがデータベースに存在するかどうかを調べます。この場合、存在しないのでtitle_count = 0となり通常の処理が走ります。通常の処理以降でtitleを文字列として処理すると文字列ではないためエラーが発生します。

読み込んだデータがNaNの時にはクエリをしない様に変更した最終的なコードになります。

import pandas as pd
from information.models import Information


def text_information(request):
    datasets = pd.read_csv("/csv/title.csv", encoding="utf_8")

    for title in datasets.TITLE:
        if title != title:
            # nanの時の処理
            title_count = 1

        else:
            title_count = Information.objects.filter(title=title).count()

        if title_count < 1:
            # 通常の処理
            # 実際にはここから文字列の処理をしています。

datasets = pd.read_csv(“/csv/title.csv”, encoding=”utf_8″)
CSVのデータをdatasetsに代入します。

for title in datasets.TITLE:
読み込んだCSVからカラム名がTITLEのデータを繰り返し処理します。

if title != title:
NaNは自分同士を比較するとFalseとなるので、ここでNaNかどうかを判定しています。もしNaNならtitle_count = 1にしています。

title_count = Information.objects.filter(title=title).count()
データベースに存在するかを調べます。

if title_count < 1:
もし存在しなければ、続きの処理をします。


当ブログは群馬県でPython / Djangoを中心にウェブアプリケーションを開発している株式会社ファントムが運営しています。

株式会社ファントムへのお問い合わせ




    Show Comments (0)

    Comments

    Related Articles

    Django

    Pandasで作ったCSVをダウンロードする

    Django上でPandasで作ったCSVをダウンロードさせる方法です。df.to_csv(“filename.csv”)でも出力は出来ますがダウンロードは出来ないので、ダウンロード機能が必要な場 […]

    Posted on by press
    Django

    That port is already in use.が表示された時の対処法

    Djangoでrunserverコマンドを使って開発用サーバーを起動した時にError: That port is already in use.が表示された時の対処法です。 Error: That port is al […]

    Posted on by press