Перебрать строку df и добавить в список без имени и dtype

У меня есть df с 24 столбцами, и я хочу перебирать каждую строку и последовательно добавлять в список.

Код ниже выполняет эту работу, но он также добавляет значение индекса, имя и тип dtype, которые мне нужно удалить.

results = []
for row in data.iterrows():
    results.append(row)
(0, 1     11.87
2      7.60
3      0.32
4      3.11
5     47.43
6     47.81
7     24.74
8     32.57
9     39.49
10    24.48
11    18.14
12    26.52
13    14.17
14    13.45
15    17.80
16    17.89
17    27.39
18    51.55
19    60.22
20    69.64
21    75.97
22    67.45
23    52.88
24    53.25
Name: 0, dtype: float64)
(1, 1     54.49
2     51.67
3     53.68
4     33.81
5     26.99
6     25.80
7     36.35
8     28.85
9     26.01
10     8.44
11     1.64
12     8.01
13    23.41
14    16.22
15    16.30
16     8.90
17     1.93
18     0.00
19     2.79
20    30.24
21    55.58
22    62.79
23    74.70
24    68.46
Name: 1, dtype: float64)

Это похоже на итерацию по каждой строке, перемещение выбранной строки, а затем последовательное добавление их в список. Если df (5, 24), то длина списка будет 5 * 24 = 120.


person Zachary Wyman    schedule 12.03.2021    source источник
comment
Каждая строка является pd.Series объектом. Так что да, это имеет смысл. Что ты хотел вместо этого? Кортежи? use for tup in data.itertuples(index=False, name=False): Вы буквально хотите, чтобы все данные были в списке, а не в фрейме данных? data.to_numpy().tolist()   -  person piRSquared    schedule 12.03.2021
comment
Да, я знаю довольно иронично, поскольку фреймы данных предпочтительнее. Данные были настроены уникальным образом, и я очень внимательно отношусь к тому, как я хочу их отформатировать. Вы с облегчением узнаете, что переформатированный список будет столбцом в кадре данных.   -  person Zachary Wyman    schedule 12.03.2021


Ответы (2)


Вам не нужно перебирать их. Попробуй это:

inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)

print(df)
    c1  c2
0   10  100
1   11  110
2   12  120

Теперь вы можете использовать .values.ravel() для создания списка всех значений фрейма данных:

list(df.values.ravel())

Выход:

[10, 100, 11, 110, 12, 120]
person ashkangh    schedule 12.03.2021
comment
Это именно то, что я хотел. Совсем забыл про ravel. Благодарю вас! - person Zachary Wyman; 12.03.2021

Поскольку ваш вопрос задан, вы, вероятно, хотите получить вывод в кортеже/списке с соответствующими значениями для каждой строки. вывод, который вы запрашиваете, не является плоским списком.

у панд есть хорошие функции для использования numpy, numpy — отличный модуль для работы с массивами/списками.

допустим, у вас есть DataFrame вызываемые данные в этом случае, если вы используете data.to_numpy(), он фактически выведет вложенный список со значениями для каждой строки.

output: 
[['joe' 'Doe' 34]
 ['bob' 'Warren' 20]
 ['Anna' 'Anderson' 10]]

вы даже можете проиндексировать свой список, например: data.to_numpy()[0]. вы даже можете .flatten() свой список, например: data.to_numpy().flatten()

вывод с .flatten():

['joe' 'Doe' 34 'bob' 'Warren' 20 'Anna' 'Anderson' 10]

вы можете использовать цикл for для:

for i in data.to_numpy():
    print(i)

это даст вам каждый список во вложенном списке.

person The.B    schedule 12.03.2021