У меня есть несколько фреймов данных, которые структурированы немного по-разному, но к ним можно применить один и тот же набор правил.Однако, хотя их очистка включает в себя один и тот же набор задач, кадры данных предназначены для очень разных целей, поэтому мне нужно хранить их отдельно.
В частности:
У меня естьсловари, у которых есть ключи в фреймах данных, которые я хотел бы заменить значениями словарей (dict1 и dict2);
Я хочу извлечь подмножество всех фреймов данных на основе значения в столбце, которое разделяют все фреймы данных;и
Я хочу изменить заголовки всех столбцов, используя одни и те же правила замены.
Вот что у меня есть:
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 желаемых изменений.Просто пытаюсь научиться писать более чистый код, исключая строки, которые делают то же самое!
Спасибо!