Как создать DataFrame по заголовку столбца?
Как сделать так, чтоб каждый последующий создаваемый DataFrame имел название столбца из которого его создают?
for column in df:
pd.DataFrame(df[column])
Пример датафрейма:
Название Название_2
Называет несколько названий Называет несколько названий
Называет несколько названий Называет несколько названий
Называет несколько названий Называет несколько названий
Называет несколько названий Называет несколько названий
Называет несколько названий Называет несколько названий
Называет несколько названий Называет несколько названий
Называет одно название (есть только один) Называет несколько названий
Называет несколько названий Называет несколько названий
Называет одно название (есть только один) Называет несколько названий
Используя:
df = pd.DataFrame(df[Название].value_counts())
Получаю DataFrame вида:
Название
Называет несколько названий 7
Называет одно название (есть только один) 2
При помощи цикла, хочу обойти весь изначальный DataFrame, но не знаю как присваивать каждому DataFrame название столбца.
Ответы (3 шт):
Вы можете сделать это как список новых датафреймов:
new_dataframes = [pd.DataFrame(columns=[column]) for column in df.columns]
Таким образом каждый новый датафрейм будет иметь пустой столбец с соответствующим именем.
Когда вы хотите как новые датафреймы получить не пустые столбцы, а тоже копии их значений, примените
new_dataframes = [pd.DataFrame(pd.DataFrame(df[column], columns=[column]))
for column in df.columns]
Пример:
In[12]: df
Out[12]:
col1 col2 col3
0 1 3 5
1 2 4 6
In[13]: new_dataframes = [pd.DataFrame(pd.DataFrame(df[column], columns=[column]))
...: for column in df.columns]
...:
In[14]: for d in new_dataframes:
...: print(d)
...:
col1
0 1
1 2
col2
0 3
col3
0 5
1 6
создайте словарь с ключами, соответствующими именам столбцов:
res = {col:df[col].value_counts().rename_axis("name").to_frame("count") for col in df}
результат:
In [432]: res.keys()
Out[432]: dict_keys(['Название', 'Название_2'])
In [433]: res["Название"]
Out[433]:
count
name
Называет несколько названий 7
Называет одно название (есть только один) 2
In [434]: res["Название_2"]
Out[434]:
count
name
Называет несколько названий 9
Мне совсем не ясно, почему вы хотите создать новые имена программным путем — см. «Ошибка молотка».
Это совсем несчастный подход, даже в других языках программирования, т.к. это не даст вам никаких преимуществ, а создает новые проблемы.
Вместо того используются структуры как списки или словари. Вот пример словаря:
dataframes = {column: pd.DataFrame(pd.DataFrame(df[column], columns=[column]))
for column in df.columns}
После того вы можете применить имя столбца как ключ, чтобы получить соответствующий датафрейм, например если оригинальный df будет
col1 col2 col3 0 1 3 5 1 2 4 6
тогда
In[20]: dataframes["col1"]
Out[20]:
col1
0 1
1 2