Получить список из колонки или строки DataFrame в pandas?
Я имею dataframe df
, импортированный из Excel-документа, который выглядит следующим образом:
cluster load_date budget actual fixed_price
A 1/1/2014 1000 4000 Y
A 2/1/2014 12000 10000 Y
A 3/1/2014 36000 2000 Y
B 4/1/2014 15000 10000 N
B 4/1/2014 12000 11500 N
B 4/1/2014 90000 11000 N
C 7/1/2014 22000 18000 N
C 8/1/2014 30000 28960 N
C 9/1/2014 53000 51200 N
Я хочу получить содержимое первого столбца df['cluster']
в виде списка, чтобы затем выполнить цикл по этому списку и создать рабочий лист Excel для каждого кластера.
Также возможно ли получить содержимое целого столбца или строки в виде списка? Например:
list = [], list[column1] или list[df.ix(row1)]
Помогите, пожалуйста!
5 ответ(ов)
Когда вы извлекаете столбцы из DataFrame в Pandas, они представляют собой объекты Series, с которыми можно работать. Для преобразования Series в список Python вы можете использовать метод tolist()
, а также можно воспользоваться встроенной функцией list()
для этого же.
Вот пример кода:
import pandas as pd
data_dict = {'one': pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two': pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(data_dict)
print(f"DataFrame:\n{df}\n")
print(f"Типы столбцов:\n{df.dtypes}")
col_one_list = df['one'].tolist()
col_one_arr = df['one'].to_numpy()
print(f"\ncol_one_list:\n{col_one_list}\ntype:{type(col_one_list)}")
print(f"\ncol_one_arr:\n{col_one_arr}\ntype:{type(col_one_arr)}")
Вывод будет следующим:
DataFrame:
one two
a 1.0 1
b 2.0 2
c 3.0 3
d NaN 4
Типы столбцов:
one float64
two int64
dtype: object
col_one_list:
[1.0, 2.0, 3.0, nan]
type:<class 'list'>
col_one_arr:
[ 1. 2. 3. nan]
type:<class 'numpy.ndarray'>
Как видно, df['one']
возвращает Series, и при вызове tolist()
мы получаем список, который поддерживает значения NaN, а при использовании to_numpy()
получаем массив NumPy.
Этот код возвращает numpy массив:
arr = df["cluster"].to_numpy()
Этот код возвращает numpy массив уникальных значений:
unique_arr = df["cluster"].unique()
Вы также можете использовать numpy для получения уникальных значений, хотя между этими двумя методами есть различия:
arr = df["cluster"].to_numpy()
unique_arr = np.unique(arr)
Пример преобразования:
Массив Numpy → DataFrame Pandas → Список из одной колонки Pandas
Массив Numpy
data = np.array([[10, 20, 30], [20, 30, 60], [30, 60, 90]])
Преобразуем массив Numpy в DataFrame Pandas
dataPd = pd.DataFrame(data=data)
print(dataPd)
0 1 2
0 10 20 30
1 20 30 60
2 30 60 90
Преобразуем одну колонку Pandas в список
pdToList = list(dataPd['2'])
Теперь переменная pdToList
будет содержать список значений из третьей колонки DataFrame: [30, 60, 90]
.
Вот простой однострочник:
list(df['load_date'])
Обновление: Метод toList()
не работает. Нужно использовать tolist()
с маленькой буквы.
Если в вашем столбце будет только одно значение, использование pd.series.tolist()
приведет к ошибке. Чтобы гарантировать, что код будет работать во всех случаях, используйте следующий код:
(
df
.filter(['column_name'])
.values
.reshape(1, -1)
.ravel()
.tolist()
)
Этот код обрабатывает случаи с одним значением, преобразуя DataFrame в массив и обеспечивая правильную форму для получения списка без ошибок.
Получение списка из заголовков столбцов DataFrame в Pandas
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas
Импорт нескольких CSV-файлов в pandas и объединение в один DataFrame
Выбор строки из pandas Series/DataFrame по целочисленному индексу