Добавьте строку в существующий фрейм данных

#pandas #dataframe

Вопрос:

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

Сначала я создал пустой фрейм данных с несколькими столбцами-

 df = pd.DataFrame(columns=['col1', 'col2', 'col3'])
df.to_csv('test.csv', sep='|', index=False)
 

тест.csv

 col1|col2|col3
 

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

 list = ['col1', 'col2', 'col3']
turn = 2
df = pd.read_csv('test.csv', sep='|')
while turn:
    for each in list:
        df[each] = turn
    turn-=1
 

Ожидаемый выходной тест.csv

 col1|col2|col3
2   |2   |2
1   |1   |1
 

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

 col1|col2|col3
 

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

Ответ №1:

Вы можете использовать df.append() для добавления строки

 import pandas as pd

df = pd.DataFrame(columns=['col1', 'col2', 'col3'])

turn = 2
while turn:
  new_row = {'col1':turn, 'col2':turn, 'col3':turn}
  df = df.append(new_row, ignore_index=True)
  turn-=1
 
 Out[11]: 

 col1 col2 col3
0    2    2    2
1    1    1    1
 

Ответ №2:

Чтобы изменить цикл while, выполните:

 turn = 2
while turn:
    for each in list:
        df.loc[len(df.dropna()), each] = turn
    turn-=1
 

 >>> df
  col1 col2 col3
0    2    2    2
1    1    1    1
>>> 
 

Причина, по которой это не работает, заключается в том, что вы назначаете весь столбец… Не конкретное значение строки.