#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]