Как перебирать каждую ячейку в фрейме данных pandas?

#python #pandas #dataframe #loops

#python #pandas #фрейм данных #циклы

Вопрос:

Как выполнить итерацию по каждой ячейке фрейма данных pandas?

Нравится

 for every_cell in df.iterrows:
   print(cell_value)

 

печать, конечно, не является целью.
Значения ячеек df должны быть обновлены в MongoDB.

Ответ №1:

если это должен быть цикл for, вы можете сделать это следующим образом:

 def up_da_ter3(df):
    
    columns = df.columns.tolist()
    
    for _, i in df.iterrows():
        
        for c in columns:
            print(i[c])
            print("############")



 

Ответ №2:

Вы можете использовать applymap . Он будет перебирать каждый столбец, начиная с самого левого. Но в целом вам почти никогда не нужно перебирать каждое значение фрейма данных, pandas имеет гораздо более эффективные способы выполнения вычислений.

 import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(6).reshape(-1, 2), columns=['A', 'B'])
#   A  B
#0  0  1
#1  2  3
#2  4  5

df.applymap(lambda x: print(x))
0
2
4
1
3
5
 

Если вам нужно растрировать фрейм данных по строкам, вы можете transpose сначала:

 df.T.applymap(lambda x: print(x))
0
1
2
3
4
5
 

Комментарии:

1. я только что отредактировал исходное сообщение. Цель состоит в том, чтобы обновлять значения в MongoDB значение по значению. Есть ли более эффективный способ, чем цикл for?

Ответ №3:

Одним из способов в качестве опции может быть использование цикла double for в квадратных скобках, например

 for i in [df[j][k] for k in range(0,len(df)) for j in df.columns]:
    print(i)
 

для того, чтобы выполнить итерацию, начиная с первого столбца до последнего в первой строке, а затем повторить тот же процесс для каждой строки по порядку членов списков.