2017-02-09 7 views
1

У меня есть база данных sqlite с 10000 rows, 6 columns и 1 уникальный столбец под названием Code. У меня также есть pandas df, который имеет 6 columns, уникальный столбец под названием Code, но с 9000 rows.Как проверить, нет ли моего столбца sqlite в моем фреймворке?

Как проверить, какие являются 1000 строки, которые из sql database что неdf?

Я пробовал:

d = connection.execute('SELECT DISTINCT "Code" FROM "my_table"').fetchall() 
for each_row_sql, each_row_df in zip(d, df['Code']): 
    if each_row_sql[0] not in each_row_df: 
     print(each_row_sql[0]) # just to see which are the rows that are not in the sql database 

Но это не работает. Он просто возвращает мне все

+0

вы можете использовать EXISTS как логическое – JB1

ответ

1

Вот небольшая демонстрация:

давайте сначала создать образец 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 
+0

Спасибо @MaxU, была интересно, что означает '' '? Кроме того, возможно ли структурировать 'missing' как' boolean' ответ? так что я могу сделать, 'если отсутствует: # сделать код'? –

+1

@jakewong, пожалуйста, проверьте UPDATE – MaxU

 Смежные вопросы

  • Нет связанных вопросов^_^