質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.83%

  • Python

    5950questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Django

    812questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

  • pandas

    376questions

    Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

invalid literal for int() with base 10: ' '

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 534

mulberryfields

Google App Engine総合1位

Djangoでアプリを作成しています。
CSVファイルからデータを読み取り、それをデータベースに登録する仕組みを実装しようとしています。
CSVデータの処理は、pandasを使おうと考えました。

import.csvの中身は、例えば、こんな感じです。
・仕訳日時
・借方分類コード
・借方科目コード
・借方補助科目コード
・借方金額
・貸方分類コード
・貸方科目コード
・貸方補助科目コード
・貸方金額
・備考

*    平成291071    160    9133    646    0    100        8057    電話機コード
    平成291071    160    9133    1123                              雑巾、モップ、洗剤
    平成291071    160    9133    1785                              マグネット、アクリル板、アクリル棒
    平成291071    160    9133    204                              スプレー塗料
    平成291071    160    9133    1213                              アクリル材、アクリルカッター
    平成291071    160    9133    1358                              スプレー塗料、クリアファイル
    平成291071    160    9170    1244                              カラーコーン
    平成291071    160    9170    484                              電池


上記のCSVファイルは、会計ソフトの仕訳データで、空欄もあります。そのため、fillna(0)を用い、空欄を0で埋めようとしました。
下記のcsv_import関数によって、CSVからデータを読み込み、データベースに登録する所までを処理したいと考えました。
JournalDiaryというのは、仕訳データのmodelです。

# views.py

def csv_import(request):
    df = pd.read_csv('import.csv', encoding="utf-8")
    rows = df.fillna(0).iterrows()
    for row in rows: # 各行ごとに処理
      journal_diary = JournalDiary( 
            date = row[1][1]
            dr_class = row[1][2]
            dr_subject = row[1][3]
            dr_auxiliary_subject = row[1][4]
            dr_amount = row[1][5]
            cr_class = row[1][6]
            cr_subject = row[1][7]
            cr_auxiliary_subject = row[1][8]
            cr_amount = row[1][9]
            content = row[1][10]
      )
       journal_diary.save() # データベースに登録

しかし、結果的に、
「invalid literal for int() with base 10: '   '」というエラーが出てしまいます。
10進法の問題のような感じがするのですが、どこを直したら良いかが分かりません。
ちなみにデータベースには、途中まで登録がうまくいっているのですが、いつもそこで終わってしまいます。
読み込めた行の次の行は、下記の内容です。
貸方科目が空欄の行です。

    平成291020    345    5    203637                              H29.7月分


試しに、CSV上で空欄の箇所に全て0を入れてみましたが、結果は同じでした。
どこに問題があるか、思い当たる点がある方、ご教示頂けないでしょうか。
手がかりが思いつかないので、よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

CSVファイルは,で区切られているのが一般的です。
各行は正しく読みこまれているのかを確認しましたか?
空欄があるせいで容易に区切り文字が設定できないのが難点だと思われます。

from io import StringIO
DATA = StringIO('''
    平成29年10月7日    1    160    9133    646    0    100        8057    電話機コード
    平成29年10月7日    1    160    9133    1123                              雑巾、モップ、洗剤
    平成29年10月7日    1    160    9133    1785                              マグネット、アクリル板、アクリル棒
    平成29年10月7日    1    160    9133    204                              スプレー塗料
    平成29年10月7日    1    160    9133    1213                              アクリル材、アクリルカッター
    平成29年10月7日    1    160    9133    1358                              スプレー塗料、クリアファイル
    平成29年10月7日    1    160    9170    1244                              カラーコーン
    平成29年10月7日    1    160    9170    484                              電池''')
pd.read_csv(DATA, sep=' ', skipinitialspace=True)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/24 12:47

    ご回答ありがとうございます。
    CSVファイルをカンマ区切りにしてみたのですが、やはり同じように、
    invalid literal for int() with base 10: ' '
    のエラーが出てしまいます。

    キャンセル

  • 2017/12/24 15:08

    fillna(0)がうまく効いていないようでした。
    CSVをよく見てみたら、うまくいかない行の所では「, ,」のように、ただのブランクではなく、空白になっていることが分かりました。
    このような箇所、fillnaのように処理できる方法が分かればうまくいきそうです。

    キャンセル

  • 2017/12/24 15:12

    csv.readerにskipinitialspace=Trueを記載することで、解決できました。
    ありがとうございました。
    https://note.nkmk.me/python-csv-skipinitialspace/

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    5950questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Django

    812questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

  • pandas

    376questions

    Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。