Как динамически перебирать фрейм данных?

#python #pandas #dataframe

#питон #панды #фрейм данных

Вопрос:

У меня есть переменная с именем columns_list , которая содержит список требуемых столбцов фрейма данных: columns_list = ['col1','col2','col3'] . Как я могу динамически перебирать фрейм данных?

Прямо сейчас код, который у меня есть, выглядит так:

 for i in range(len(df)):  s = tuple(zip(df[columns_list][0].str.split(",")[i],df[columns_list][1].str.split(",")[i],df[columns_list][2].str.split(",")[i])  

Как сделать так, чтобы это работало динамически, когда список столбцов продолжает меняться?

Ответ №1:

Ты пытаешься сделать что-то подобное?

 for i in range(len(df)):  s = []  for col in columns_list:  s.append(df.iloc[i][col].split(","))  s = tuple(zip(s))  ...  

Или с пониманием списка:

 for i in range(len(df)):  s = tuple(zip(df.iloc[i][col].split(",") for col in columns_list))  ...  

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

1. Спасибо, @PinyiWang Раньше в конечной переменной » s » было 3 значения столбцов рядом друг с другом, теперь все они расположены один под другим. Как это исправить?

Ответ №2:

Если вы действительно хотите повторить кадр данных, я бы сделал что-то вроде:

 for s in zip(*(df[c].str.split(",") for c in columns_list)):  print(s)  

Результат для

 df = pd.DataFrame(  {"col1": ["a,b,c", "d,e"], "col2": ["1,2", "3,4,5"], "col3": ["x,y,z", "v"]} ) columns_list = ["col2", "col3"]  

является

 (['1', '2'], ['x', 'y', 'z']) (['3', '4', '5'], ['v'])  

Если вы хотите изменить свой исходный фрейм данных:

 for c in columns_list:  df[c] = df[c].str.split(",")  
 col1 col2 col3 0 a,b,c [1, 2] [x, y, z] 1 d,e [3, 4, 5] [v]  

Или если вы хотите построить новый с разделенными столбцами:

 df_cols_splitted = pd.concat(  (df[c].str.split(",") for c in columns_list), axis="columns" )  
 col2 col3 0 [1, 2] [x, y, z] 1 [3, 4, 5] [v]