Я хотел бы добавить столбец нулей к кадру данных, если рассматриваемый столбец еще не находится внутри кадра данных.
Если фрейм данных выглядит так:
df = pd.DataFrame({'a':[0,1,0], 'c':[1,1,1]})
----------------------------------------------
a c
0 0 1
1 1 1
2 0 1
И полный список имен столбцов, которые должен иметь фреймворк данных:
col_names = ['a', 'b', 'c']
Я хотел бы, чтобы результат выглядел так после применения понимания списка к df:
a b c
0 0 0 1
1 1 0 1
2 0 0 1
Это полный код, который у меня есть до сих пор:
col_names = ['a','b','c']
df = pd.DataFrame({'a':[0,1,0], 'c':[1,1,1]})
# This is what I would like to convert into a list comprehension (one line) format if possible
for col in col_names:
if col not in df.columns:
df[col] = 0
# Re-order the columns into the correct order
df = df[col_names]
print(df)
Не совсем понятно, что вы ищете. Кажется, вы просто хотите добавить недостающие столбцы «более элегантным» способом, чем простой цикл for?
Это верно






Понимание списка произвело бы список. Вам не нужен список, вы хотите добавить столбцы в свой фрейм данных. Понимание списков никогда не должно использоваться для побочных эффектов.
Однако вы можете создать столбцы, которые хотите добавить, в виде списка и использовать расширенную индексацию для одновременного назначения всех столбцов:
df[[col for col in col_names if col not in df.columns]] = 0
Это именно то, что я искал. Но не уверен, почему вы предлагаете этого не делать??
В вышесказанном нет ничего плохого. Я только предупредил, что попытка выполнить задание внутри понимания является анти-шаблоном, и это то, о чем изначально звучало так, как будто вы просили.
Есть ли такая вещь, как понимание столбца ?? :)