Как читать в csv и создавать новые столбцы в результирующем фрейме данных на основе результатов наличия / отсутствия строк в некоторых столбцах?

#python #pandas

#python #pandas

Вопрос:

У меня есть функция, которая принимает два входных данных: год и идентификатор, связанный с определенным файлом CSV. Затем (используя цикл try и except), выполняется следующее:

  1. Считывает в csv.
  2. Создает новый столбец на основе ввода функции.
  3. Использует несколько представлений списка, чтобы проверить, отображаются ли определенные переменные в именах столбцов.
  4. Назначает новые столбцы на основе выходных данных этих 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()