#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
По сути, я хочу что-то вроде этого:
A B C D
1 v v v
2 v v v
3 v v
где:
- строка 1 имеет значение для столбцов A, B и D, но не имеет столбца C
- строка 2 имеет значение для столбцов A, C и D, но не имеет столбца B
- строка 3 имеет значение для столбцов B и C, но не содержит столбцов A и D.
В качестве небольшой предыстории я извлекаю строки из Dynamo DB непосредственно в фрейм данных Pandas, и поскольку каждая строка в Dynamo по сути является отдельным автономным объектом JSON, я часто сталкиваюсь с описанной выше ситуацией. Некоторые из моих вызовов функций pandas завершаются ошибкой KeyError, поскольку столбец даже не существует. Я хочу воссоздать ситуацию, чтобы найти способ справиться с ней более изящно.
Спасибо.
Комментарии:
1. Вы пробовали
.loc
? Что-то вродеdf.loc[0, ['A', 'B', 'D']] = ['v', 'v', 'v']
.2. Можете ли вы загрузить данные в фрейм данных? Не могли бы вы показать, как выглядят ваши входные данные и ожидаемый результат?
3. @ResidentSleeper — У меня есть — когда я это делаю, я получаю — KeyError: «Ни один из [Index([‘A’, ‘B’, ‘D’], dtype=’object’)] не находится в [столбцах]»
4. @FrancoPiccolo — Не так просто — мы имеем дело с данными наблюдения, и они генерируют ~ 50 строк в секунду. По сути, JSON на уровне строки содержит данные наблюдения, которые были измерены в этом интервале. Многие столбцы являются общими для каждой строки, но не для каждого столбца. В качестве примера столбец activity отображается 3 раза в 550 строках данных наблюдения.
5. Сначала вы должны создать фрейм данных.
df = pd.DataFrame(columns=['A', 'B', 'C', 'D'])
Затем попробуйтеdf.loc[0, ['A', 'B', 'D']] = ['v', 'v', 'v']
.
Ответ №1:
Например, если вы ищете все уникальные перестановки списка ['v', 'v', 'v', '']
, это можно сделать с помощью itertools
:
import itertools
data_list = ['v', 'v', 'v', '']
data = set(itertools.permutations(data_list))
df = pd.DataFrame(data=data, columns=list('ABCD'))
Комментарии:
1. Я не думаю, что у него есть только
v
его данные. Они были скорее символическими в отношении того, где у него есть данные, а где нет.2. @Quang Hoang — Это на 100% правильно. Я использовал v, чтобы указать, что существует значение, но значение не было важным для контекста вопроса.
Ответ №2:
Это генерирует фрейм данных, но в 1-й строке есть столбец ‘C’, во 2-й строке есть столбец ‘D’, а в 3-й строке есть столбцы ‘A’ и ‘D’, несмотря на то, что я их не указываю:
df = pd.DataFrame([{'A': 'v', 'B': 'v', 'D': 'v'}, {'A':'v', 'B':'v', 'C':'v'}, {'B':'v', 'C':'v'}])
Я не думаю, что возможно создать фрейм данных, в котором только определенные строки имеют определенные столбцы.