這裏是一個小的演示:
讓我們首先生成一個樣本DF(10行,3列),並將其寫入到SQLiteDB文件:
In [40]: import sqlite3
...: from sqlalchemy import create_engine
...:
...: engine = create_engine('sqlite:///d:/temp/sqlalchemy_example.db')
...:
...: x = pd.DataFrame(np.random.randint(0, 10, (10,3)), columns=list("abc"))
...: x.insert(0, 'Code', np.arange(len(x)))
...: x.to_sql('my_table', engine, index=False)
...:
In [41]: x
Out[41]:
Code a b c
0 0 4 6 6
1 1 2 5 8
2 2 3 9 2
3 3 3 1 2
4 4 9 8 4
5 5 2 8 1
6 6 5 1 8
7 7 8 9 7
8 8 0 7 3
9 9 2 6 3
現在,讓我們產生了df
有5行,3列:
In [42]: df = pd.DataFrame(np.random.randint(0, 10, (5,3)), columns=list("abc"))
...: df.insert(0, 'Code', np.arange(len(df)))
...:
In [43]: df
Out[43]:
Code a b c
0 0 8 4 8
1 1 1 1 0
2 2 5 5 2
3 3 2 2 8
4 4 3 2 2
注意兩組數據具有獨特Code
列。
解決方案:
In [44]: db_df = pd.read_sql('select * from my_table', engine)
...: missing = db_df.loc[~db_df.Code.isin(df.Code)]
...: print(missing)
...:
Code a b c
5 5 2 8 1
6 6 5 1 8
7 7 8 9 7
8 8 0 7 3
9 9 2 6 3
UPDATE:
~
是布爾指數的否定:
In [45]: db_df.Code.isin(df.Code)
Out[45]:
0 True
1 True
2 True
3 True
4 True
5 False
6 False
7 False
8 False
9 False
Name: Code, dtype: bool
In [46]: ~db_df.Code.isin(df.Code)
Out[46]:
0 False
1 False
2 False
3 False
4 False
5 True
6 True
7 True
8 True
9 True
Name: Code, dtype: bool
可以使用EXISTS作爲一個布爾 – JB1