#python #pandas
#python #pandas
Вопрос:
У меня есть функция, которая принимает два входных данных: год и идентификатор, связанный с определенным файлом CSV. Затем (используя цикл try и except), выполняется следующее:
- Считывает в csv.
- Создает новый столбец на основе ввода функции.
- Использует несколько представлений списка, чтобы проверить, отображаются ли определенные переменные в именах столбцов.
- Назначает новые столбцы на основе выходных данных этих 3-х списков.
По какой-то причине все в порядке, пока я не назначу новые столбцы. Как только я добавляю этот шаг, я возвращаю нетипичный фрейм данных. Я в недоумении, почему это происходит, а также как это исправить?
def read_csv_create_cols(id, year=2020):
subs_2 = ["_rate"]
path = os.path.join(path1, path2/{id}/{year})
try:
new_df = pd.read(csv(path, low_memory=False)
new_df["id"] = id
col_name_1 = [col for col in new_df.columns if "product" in col]
col_name_2 = [col for col in new_df.columns if "date" in col]
col_name_3 = [col for col in new_df.columns if all (sub in column for sub in subs_2)]
new_df["col_name_1"] = new_df[col_name_1]
new_df["col_name_2"] = new_df[col_name_2]
new_df["col_name_3"] = new_df[col_name_3]
except:
return None
Ответ №1:
Все ваши col_name
vairables генерируются с использованием понимания списка, поэтому они также являются списками. Вы должны отменить их список, чтобы получить фактические имена столбцов, необходимые для назначения новых столбцов. Попробуйте следующее
new_df["col_name_1"] = new_df[col_name_1].pop()
new_df["col_name_2"] = new_df[col_name_2].pop()
new_df["col_name_3"] = new_df[col_name_3].pop()