5

Получить список из колонки или строки DataFrame в pandas?

17

Я имею 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 ответ(ов)

9

Когда вы извлекаете столбцы из 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.

0

Этот код возвращает numpy массив:

arr = df["cluster"].to_numpy()

Этот код возвращает numpy массив уникальных значений:

unique_arr = df["cluster"].unique()

Вы также можете использовать numpy для получения уникальных значений, хотя между этими двумя методами есть различия:

arr = df["cluster"].to_numpy()
unique_arr = np.unique(arr)
0

Пример преобразования:

Массив 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].

0

Вот простой однострочник:

list(df['load_date'])

Обновление: Метод toList() не работает. Нужно использовать tolist() с маленькой буквы.

0

Если в вашем столбце будет только одно значение, использование pd.series.tolist() приведет к ошибке. Чтобы гарантировать, что код будет работать во всех случаях, используйте следующий код:

(
    df
        .filter(['column_name'])
        .values
        .reshape(1, -1)
        .ravel()
        .tolist()
)

Этот код обрабатывает случаи с одним значением, преобразуя DataFrame в массив и обеспечивая правильную форму для получения списка без ошибок.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь