Я хотел бы добавить столбец нулей к кадру данных, если рассматриваемый столбец еще не находится внутри кадра данных.
Если фрейм данных выглядит так:
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
Это именно то, что я искал. Но не уверен, почему вы предлагаете этого не делать??
В вышесказанном нет ничего плохого. Я только предупредил, что попытка выполнить задание внутри понимания является анти-шаблоном, и это то, о чем изначально звучало так, как будто вы просили.
Есть ли такая вещь, как понимание столбца ?? :)