#python #pandas
#python #панды
Вопрос:
Я составляю список фреймов данных из конечных точек ReST (т.Е. Из результатов json). В некоторых случаях, во время заключительных шагов, когда я устанавливаю окончательный набор столбцов, я получаю исключение KeyError.
images_df = pd.concat(images)
images_df = images_df[list(cvpc.images_columns.keys())]
Я хотел бы знать, есть ли способ установить столбцы таким образом, чтобы несуществующие столбцы просто создавались с нулевыми значениями?
Я также пытался установить столбцы перед добавлением в список фреймов данных, т.е.:
temp_df = temp_df[list(cvpc.images_columns.keys())]
images.append(temp_df)
Так что, если я смогу заставить столбцы «создавать», даже если они не существуют, это было бы огромной победой, поскольку более ранняя настройка столбцов может помочь сохранить окончательный список изображений минимального размера.
Вот простой пример:
data = {'col_1': [3, 2, 1, 0], 'col_2': ['a', 'b', 'c', 'd']}
df_t = pd.DataFrame(data)
final_columns = ['col_1', 'col_2', 'col_3']
df = df_t[final_columns]
Любые предложения будут с благодарностью приняты.
Ответ №1:
Вы можете сделать что-то вроде этого:
import numpy as np
import pandas as pd
data = {'col_1': [3, 2, 1, 0], 'col_2': ['a', 'b', 'c', 'd']}
df_t = pd.DataFrame(data)
final_columns = ['col_1', 'col_2', 'col_3']
for col in final_columns:
if col not in df_t.columns:
df_t[col] = np.NaN
Ответ №2:
вы можете создать словарь и распаковать его, используя assign
для несуществующих столбцов, а затем просто нарезать столбцы, как вы сделали выше, со списком.
import numpy as np
df = df_t.assign(**{col : np.nan for col in final_columns if col not in df_t.columns}
)[final_columns]
print(df)
col_1 col_2 col_3
0 3 a NaN
1 2 b NaN
2 1 c NaN
3 0 d NaN
Комментарии:
1. Я попробовал это, но это не сработало, когда я добрался до шага, на котором я установил окончательный набор столбцов, после выполнения вышеуказанного я затем попытался
df_t = df_t[final_columns
убедиться, что мой окончательный фрейм данных содержит только нужные столбцы, т. Е. Если был col_2_5, который я не хотел. Это может быть связано с тем, что я не особенно хорошо освещаю этот аспект в своем примере.2. Я проверю еще раз, но в моем первоначальном тесте я снова получил ошибку ключа для отсутствующих столбцов, хотя первый ответ, принятый, сработал.
Ответ №3:
Я назначу пустые столбцы, заполненные значениями NaN:
import numpy as np
import pandas as pd
data = {'col_1': [3, 2, 1, 0], 'col_2': ['a', 'b', 'c', 'd']}
df_t = pd.DataFrame(data)
final_columns = ['col_1', 'col_2', 'col_3']
for x in final_columns:
if not x in list(df_t.columns.values):
df_t[x] = np.nan
df = df_t[final_columns]
Позже вы можете заполнить столбцы NaN.