#python #pandas
Вопрос:
Я сравниваю исходный и целевой набор данных(9000 строк,14 столбцов) и выделяю разницу, используя приведенный ниже код. здесь с помощью apply
метода я вызываю функцию. но проблема в том, что выделение различий работает до некоторых строк, после чего строки не выделяют различия. Не уверен, в чем заключается ограничение, или я что-то здесь упускаю?
Примечание: Я не уверен,как прикрепить файл набора данных к этому вопросу, но я использую образец csv с 9000 строками и 14 столбцами отсюда
пример здесь, в первой записи, подчеркивает разницу,
но после идентификатора 4144 он не выделяет его.
ниже приведен мой полный код-
import pandas as pd
import numpy as np
from IPython.display import display, HTML
def join_datasets(source, target):
source_df = pd.read_csv(source)
target_df = pd.read_csv(target)
combined_df = pd.concat([source_df.set_index('id'), target_df.set_index('id')],
axis='columns', keys=['Source', 'Target'])
combined_df = combined_df.swaplevel(axis='columns')[source_df.columns[1:]]
return combined_df
def highlight_diff(data, color='yellow'):
attr = 'background-color: {}'.format(color)
other = data.xs('Source', axis='columns', level=-1)
return pd.DataFrame(np.where(data.ne(other, level=0), attr, ''),
index=data.index, columns=data.columns)
custom_style = [
{
'selector':'caption',
'props':[('font-weight', 'bold'),('margin-bottom','25px'),('font-size','25px')]
},
{
'selector': '',
'props': [('border-collapse', 'collapse'),('margin', '100px auto')]
},
{
'selector': 'table',
'props': [('border-collapse', 'collapse'),('margin', '100px auto')]
},
{
'selector': 'tbody',
'props': [('border', '1px solid #A2DBFA')]
},
{
'selector': 'td',
'props': [('border', '1px solid #A2DBFA'),('padding','1em'),('border-bottom','2px solid #A2DBFA')]
},
{
'selector': 'th',
'props': [('border', '1px solid #A2DBFA'),('padding','1em'),('background-color','#39A2DB'),('border-bottom','2px solid #A2DBFA')]
}
]
df = join_datasets('source.csv', 'target.csv')
df = df.style.set_table_styles(custom_style, overwrite=True).set_caption("Test Case 1").apply(highlight_diff, axis=None)
df
Комментарии:
1. 1. уменьшите свой фрейм данных до размера, достаточного для вставки в виде csv, убедитесь, что проблема все еще сохраняется. 2. Разделите свои проблемы: это ошибка jupyter или вы
highlight_diff
делаете что-то странное? Можете ли вы добавить столбец «выделено» с True/False, чтобы узнать, является ли это проблемой визуализации или данных? 3. Не используйте Jupyter так, как будто это excel.2. @Ufos — это не проблема Jupyter, и я тоже использую pycharm, и у меня та же проблема. и если я уменьшу запись до 1000 ,она будет работать нормально. я думаю, что где-то есть проблема с apply(highlight_diff, ось=Нет), и эта проблема существует как в excel, так и в csv
3. Если вы не опубликуете полный набор данных, никто не сможет узнать причину. Вы говорите, что проблема возникает и с excel, так что это не проблема панд/питона. Возможно, проблема в самих данных или в компьютере, который вы используете.
4. @Mohammad, можете ли вы сообщить мне, как мне прикрепить сюда файл набора данных?
5. Я протестировал это в JupyterLab v. 3.0.16, и все 9000 ячеек выделяются. Я поддерживаю @Ufos в этом вопросе и предполагаю, что у вас может возникнуть проблема с рендерингом.