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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python

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

pandas

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

Q&A

解決済

1回答

1602閲覧

sqlite で複数のファイルを読込み整理する

baya

総合スコア14

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python

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

pandas

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

0グッド

0クリップ

投稿2018/11/30 16:02

前提・実現したいこと

複数あるデータファイルを読込み込み重複している行を取り除きたいです。
また、再度実行するときテーブルに同じデータが残っている場合に同じ追加データを消去し重複箇所がないようにしたいです。

読込むデータ

#01.csv date,text 2018-07-18,a, 2018-07-19,d, 2018-07-20,c, 2018-07-21,d, #02.csv date,text 2018-07-20,c, 2018-07-21,d, 2018-07-22,e, 2018-07-23,f #03.csv date,text 2018-07-23,f, 2018-07-24,g, 2018-07-25,h,

###行いたいこと(出力結果)

date,text 2018-07-18,a, 2018-07-19,d, 2018-07-20,c, 2018-07-21,d, 2018-07-22,e, 2018-07-23,f 2018-07-24,g, 2018-07-25,h,

該当のソースコード

python3

1import sqlite3 2import glob 3import pandas as pd 4 5#file_list = [] 6dbname = "test_code.db" 7conn = sqlite3.connect(dbname) 8c = conn.cursor() 9 10file_list = glob.glob('*.csv') 11c.execute('select distinct text,date,PN from code_133222') 12conn.commit() 13 14for filename in file_list: 15 df = pd.read_csv(filename) 16 df = df.to_sql("code_01", conn, if_exists="append") 17 18 c.execute('select distinct text,date from code_01') 19 conn.commit() 20c.execute('SELECT * FROM code_01 ORDER BY date ASC;') 21conn.commit() 22 23select_sql = 'select * from code_01' 24for row in c.execute(select_sql): 25 print(row) 26 27conn.close() 28

試したこと

重複データを除外して取得する
c.execute('select distinct text,date from code_01')と
時間ごとに整理する
c.execute('SELECT * FROM code_01 ORDER BY date ASC;')

が上手く扱えていないような気がするのですが、解決方法がわかりませんでした

補足情報

SQLite version 3.23.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、このコードを複数回実行するとcode_01テーブルに行が貯まっていくのを避けるためdrop tableします。
また、途中でselect distinct~してもテーブル内容は一切変わらないので、処理をなくします。
そして、最後のselect distinct~にて重複を除いた行だけ抽出します。

Python

1import sqlite3 2import glob 3import pandas as pd 4 5dbname = "test_code.db" 6conn = sqlite3.connect(dbname) 7 8# 既存テーブルは削除 9c = conn.cursor() 10c.execute('drop table if exists code_01;') 11 12file_list = glob.glob('*.csv') # subに配置 13for filename in file_list: 14 df = pd.read_csv(filename) 15 df = df.to_sql("code_01", conn, if_exists="append") # 重複データは追加する(無視するというオプションはない…) 16 17select_sql = 'select distinct * from code_01' 18for row in c.execute(select_sql): 19 print(row) 20conn.close() 21""" 22('2018-07-18', 'a', None) 23('2018-07-19', 'd', None) 24('2018-07-20', 'c', None) 25('2018-07-21', 'd', None) 26('2018-07-22', 'e', None) 27('2018-07-23', 'f', None) 28('2018-07-24', 'g', None) 29('2018-07-25', 'h', None) 30"""

投稿2018/11/30 21:19

can110

総合スコア38256

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

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

baya

2018/12/01 11:46

なるほど、理解できました。 ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問