2016-06-05 1 views
0

Мне нужно создать и обновить список на основе извлеченного файла базы данных и файла csv. Я планирую сделать это, используя 2 панда данных.создать файл изменения 2-х кадров данных

Я могу сгенерировать вставки (новые элементы в файле csv на основе df) и удаления (элементы, которые не существуют в файле csv на основе df), но я не знаю, как создавать и обновлять список. ДИКТ должен содержать только столбцы, где измененные значения и столбец ключа

результат операции должен быть чем-то вроде этого:

{'key': 10, 
'column1': 'abc', 
'column6': 10.8 
} 

Любая идея о том, как достичь этого?

+0

Просьба представить образец того, что два данных-кадры будут выглядеть так, как бы произвести этот вывод –

+0

и, что код ты пытался... – Merlin

ответ

0

вы можете сделать это следующим образом:

In [424]: df 
Out[424]: 
    a b c d 
0 7 5 1 3 
1 1 8 6 1 
2 9 6 5 2 
3 5 5 4 2 
4 7 1 4 6 

In [425]: df2 
Out[425]: 
    a b c d 
0 -1 5 1 -1 
1 1 8 6 1 
2 9 6 5 2 
3 5 5 -1 2 
4 7 1 4 6 

In [426]: df.index.name = 'key' 

In [427]: df2.index.name = 'key' 

In [430]: (df2[df2 != df] 
    .....:  .dropna(how='all') 
    .....:  .dropna(axis=1, how='all') 
    .....:  .reset_index() 
    .....:  .apply(lambda x: x.dropna().to_dict(), axis=1) 
    .....:) 
Out[430]: 
0 {'a': -1.0, 'd': -1.0, 'key': 0.0} 
1    {'c': -1.0, 'key': 3.0} 
dtype: object 

объяснение:

In [441]: df2[df2 != df] 
Out[441]: 
     a b c d 
key 
0 -1.0 NaN NaN -1.0 
1 NaN NaN NaN NaN 
2 NaN NaN NaN NaN 
3 NaN NaN -1.0 NaN 
4 NaN NaN NaN NaN 

    In [443]: df2[df2 != df].dropna(how='all') 
    Out[443]: 
      a b c d 
    key 
    0 -1.0 NaN NaN -1.0 
    3 NaN NaN -1.0 NaN 

In [444]: df2[df2 != df].dropna(how='all').dropna(axis=1, how='all') 
Out[444]: 
     a c d 
key 
0 -1.0 NaN -1.0 
3 NaN -1.0 NaN