Создание словаря из эксель с условием
Есть эксель таблица вида
необходимо создать словарь где номер столбца это ключ а номера пустых ячеек это значения При попытке сделать это следующим способом
f = r'R:\TEST\TESTXLS.xlsx'
df = pd.read_excel(f)
for cols in df.columns:
b.setdefault(cols,[])
if df.loc[cols]=='nan':
b[cols].append(df.loc[ID])
print b
появляется ошибка ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). Как правильно написать код чтобы избавиться от этой ошибки ?
Ответы (2 шт):
Автор решения: D.Vinogradov
→ Ссылка
Допустим у нас есть такой фрейм:
df = pd.DataFrame({'a': [np.nan, 2, 3,4 , np.nan], 'b': [6, np.nan, 8, 9, np.nan], 'c':[1, 2, np.nan, 5, 34]})
>>> df
a b c
0 NaN 6.0 1.0
1 2.0 NaN 2.0
2 3.0 8.0 NaN
3 4.0 9.0 5.0
4 NaN NaN 34.0
В вашем случае это фрейм из эксель файла.
Тогда есть такие варианты.
Вариант 1.
dict_of = {i: df[df[i].isna()].index.to_list() for i in df.columns}
>>> dict_of
{'a': [0, 4], 'b': [1, 4], 'c': [2]}
Вариант 2.
dict_of = {key: [k for k, v in value.items() if np.isnan(v)] for key, value in df[df.isna().any(axis=1)].to_dict().items()})
>>> dict_of
{'a': [0, 4], 'b': [1, 4], 'c': [2]}
Автор решения: Grechkin 26
→ Ссылка
Заработал вот такой вариант
df = df.set_index('ID')
dict_of = {i: df[df[i].isnull()].index.tolist() for i in df.columns}
ввиду работы на старых версиях isna был заменён на isnull, to_list на tolist. Предварительно был установлено новый индекс
