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

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

新規登録して質問してみよう
ただいま回答率
85.48%
BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1404閲覧

csv.DictReaderからJsonファイル化後に出来るNone:部分を削除したいです。

amaturePy

総合スコア131

BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/01/12 13:14

CSVファイルをJson化し、Google BigQueryにストリーミングでデータを入れる際に、一部Nullデータが原因でうまくデータが入らないので、こちらを排除したいです。
Null部分の排除の方法を教えて頂けないでしょうか?
下のコードでは今扱っているデータ(列数30)より少ない列数10ほどの物でストリーミングでデータを挿入を確認できています。
また、Jsonに対する知識不足で大変申し訳ないのですが、他のデータはキーと値が対になっているようなのですが、なぜ最後にNull:というデータ群ができてしまっているのでしょうか??

エラー文
挿入先にNullというフィールドはないよと出ております。
イメージ説明

print(json_rows)

イメージ説明

def stream_data(): # BigQuery client = bigquery.Client() project_id = 'test_project' dataset_name = 'test' table_name = "test" full_table_name = dataset_name + '.' + table_name json_rows = [] with open('./test.csv','r') as f: for line in csv.DictReader(f,skipinitialspace=False,quoting=csv.QUOTE_NONE): line_json = dict(line) json_rows.append(line_json) errors = client.insert_rows_json( full_table_name,json_rows,row_ids=[row['luid'] for row in json_rows] ) //特定カラムの重複データ排除 if errors == []: print("New rows have been added.") else: print("Encountered errors while inserting rows: {}".format(errors)) print("end") schedule.every(0.5).seconds.do(stream_data) while True: schedule.run_pending() time.sleep(0.1)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

下記のようにフィールドの数よりもデータの数の方が多くなっていることが考えられます。
test.csv

csv

1a, b, c 211,12,13,14 321,22,23,24 431,32,33,34 541,42,43,44,1,2020-12-31,,,,1,2020-12-31

test.py

python

1import csv 2with open('./test.csv', 'r') as f: 3 for line in csv.DictReader(f): 4 print(line)

出力結果

{'a': '11', 'b': '12', 'c': '13', None: ['14']} {'a': '21', 'b': '22', 'c': '23', None: ['24']} {'a': '31', 'b': '32', 'c': '33', None: ['34']} {'a': '41', 'b': '42', 'c': '43', None: ['44', '1', '2020-12-31', '', '', '', '1', '2020-12-31']}

省略されたフィールドはデフォルトでNoneになります。
省略されているフィールドをNone以外にするには、restkeyに適当な文字列等を指定します。
https://docs.python.org/ja/3/library/csv.html#csv.DictReader

for line in csv.DictReader(f, restkey="Field_1"): print(line)

投稿2021/01/12 14:04

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaturePy

2021/01/13 07:20

ありがとうございます! 参考にさせて頂きます!
guest

0

自己解決

del関数でNoneを削除することで解決いたしました。
コードはいかになります。

with open('./test.csv','r') as f: for line in csv.DictReader(f): del line[None] line_json = dict(line) json_rows.append(line_json)

投稿2021/01/12 14:01

amaturePy

総合スコア131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問