Я очищаю данные и имею набор допустимых значений для столбцов, содержащих перечисленные данные. Поэтому я хочу разбить набор данных на строки, которые являются AOK и строками, которые содержат недопустимые данные столбца. Фокус в том, что строки с недопустимыми данными столбца должны заполнять специальный столбец списком имен столбцов, которые были недопустимы для этой строки.Pandas Spit DataFrame для условий столбца и создания столбца с разрывом Причина
Например, с учетом следующей таблице:
A B C D
0 foo one 0 0
1 bar one 1 2
2 foo two 2 4
3 bar three 3 6
4 foo two 4 8
5 bar two 5 10
6 foo one 6 12
7 foo three 7 14
с пределом, который Col А может быть { 'Foo'} и столбец В может быть { 'один', 'два'}. Выходные dataframes должны быть следующими:
Допустимые строки:
A B C D
0 foo one 0 0
2 foo two 2 4
4 foo two 4 8
6 foo one 6 12
инвалидные строки:
A B C D Exception
1 bar one 1 2 A
3 bar three 3 6 A, B
5 bar two 5 10 A
Как новичок панды я пошел об этом следующим образом:
columnBounds = {'A' : {'foo'}, 'B':{'one', 'two'}}
df['exception'] = ''
for columnName, bounds in columnBounds.iteritems():
idlist = df[~df.columnName.isin(bounds)].index.tolist()
for ix in idlist:
if df.loc[ix, 'exception'] == '':
df.loc[ix, 'exception'] = str(ix)
else:
df.loc[ix, 'exception'] += ', {}'.format(str(ix))
baddf = df[df.exception.isin([''])]
gooddf = df[~df.exception.isin([''])]
Этот код выглядит неправильно во многих отношениях, но в основном li п:
idlist = df[~df.columnName.isin(bounds)].index.tolist()
терпит неудачу, как использование «ColumnName» терпит неудачу в контексте ДФА [], как это ожидает буквальное значение имени столбца. Как исправить это и/или что было правильным способом решить исходную проблему? Также существует проблема с тем, как они собираются, но я не понял, как хранить и управлять одним списком, встроенным в ячейку pandas.
Спасибо!
Спасибо. Если бы я знал, что 'isin' принял' dict', мой код был бы проще. Урок выучен! –
Спасибо! Это решение прекрасно использует инструменты для вырезания сложности. – Colin