Перебирайте список фреймов данных, чтобы выполнять такие вещи, как замена значений, выбирать подмножество на основе критериев и изменять заголовки столбцов. - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть несколько фреймов данных, которые структурированы немного по-разному, но к ним можно применить один и тот же набор правил.Однако, хотя их очистка включает в себя один и тот же набор задач, кадры данных предназначены для очень разных целей, поэтому мне нужно хранить их отдельно.

В частности:

  1. У меня естьсловари, у которых есть ключи в фреймах данных, которые я хотел бы заменить значениями словарей (dict1 и dict2);

  2. Я хочу извлечь подмножество всех фреймов данных на основе значения в столбце, которое разделяют все фреймы данных;и

  3. Я хочу изменить заголовки всех столбцов, используя одни и те же правила замены.

Вот что у меня есть:

df_list = [df1, df2, df3]
dict1 = {
   'Never' : 1, 
   'Rarely' : 2, 
   'Sometimes' : 3, 
   'Frequently' : 4, 
   'Always' : 5
}
dict2 = {
   'Hate it': 1, 
   'Dislike it' : 2, 
   'No opinion' : 3, 
   'Like it' : 4, 
   'Love it' : 5
}

# my attempt to recode values using the dictionaries for all dataframes

dfs = [(df.replace(dict1).replace(dict2)) for df in df_list]

# subsequent attempt to take subset based on value of a specific column
# that all dataframes share

dfs = [df[(df['Complete']=='Yes')] for df in dfs]

# and I don't know how to do this using a list of dataframes, 
# but this is the logic that I want to use for all dataframe column names
# (basically removing all underscores and spaces):

df1.columns = df1.columns.str.strip().str.replace('_', '').str.replace(' ','')
df2.columns = df2.columns.str.strip().str.replace('_', '').str.replace(' ','')
df3.columns = df3.columns.str.strip().str.replace('_', '').str.replace(' ','')


Кажется, что измененные кадры данных меняются, когда я печатаю dfs, но когда я печатаю кадр данных (df1, df2 или df3), я вижу, что фактический кадр данных не был изменен.Я думаю, это означает, что я изменяю ссылку на реальный фрейм данных, а не на реальный фрейм данных, но я озадачен тем, как заставить циклы воздействовать на фактические фреймы данных для всех 3 желаемых изменений.Просто пытаюсь научиться писать более чистый код, исключая строки, которые делают то же самое!

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...