В панд python, Как применить цикл для создания строк для нескольких столбцов?

#python #pandas #dataframe

Вопрос:

 import pandas as pd
import numpy as np


column_names = [str(x) for x in range(1,4)]

df= pd.DataFrame ( columns = column_names )

new_row = []

for i in range(3):
    new_row.append(i)


df = df.append(new_row , ignore_index = True) 


print(df)
 

выход:

      1    2    3    0
0  NaN  NaN  NaN  0.0
1  NaN  NaN  NaN  1.0
2  NaN  NaN  NaN  2.0
 

Есть ли способ применить цикл к столбцу 1, столбцу 2 и столбцу 3?

Я думаю, что это возможно с помощью простого кода, не так ли?

Я много думал, но не знаю как.

Я также попробовал метод .loc (), но не смог применить цикл к строке столбцов.


Это дополнительное объяснение.

‘column_names = [str(x) для x в диапазоне(1,4)]’ создает столбцы от 0 до 3.

К каждому столбцу применяется цикл.

Петля «для» вставляет от 0 до 2 в столбец 1.

Следовательно, 0, 1, 2 являются входными данными для строки столбца 1.

Результат, который я хочу, приведен ниже.


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

1. Вы хотите создать одну строку с одним значением для каждого столбца или 3 строки с 3 значениями для каждого столбца ?

Ответ №1:

Вы можете добавить следующий код после всех приведенных выше кодов:

 for col in df:
    df[col] = new_row
 

Результат:

Если вы запустите после всех ваших кодов:

 column_names = [str(x) for x in range(1,4)]

df= pd.DataFrame ( columns = column_names )

new_row = []

for i in range(3):
    new_row.append(i)

df = df.append(new_row , ignore_index = True) 
 

Затем запустите код здесь:

 for col in df:
    df[col] = new_row
 

Вы должны получить:

 print(df)

   1  2  3  0
0  0  0  0  0
1  1  1  1  1
2  2  2  2  2
 

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

1. Забавно, что я не понимаю одного и того же. Имя переменной new_row таково, что я думаю, что операция хочет добавить только одну строку.

2. @Corralien Правильно! Просто угадай, чего ты хочешь. Еще не знаю, правильно это или неправильно.

3. В результате получается следующее. Пустые столбцы фрейма данных: [1, 2, 3] Индекс: []

4. @yodoro Вы также запустили свой исходный код df = df.append(new_row , ignore_index = True) ? Я предполагал, что вы уже управляете им.

5. Ваш код также отлично печатается. Мне придется изучить код других людей и ваш код. Спасибо.

Ответ №2:

Я знаю, это странно, но ты можешь использовать .loc это для этого:

 df.loc[len(df.index) 1] = new_row
 
 >>> df
   1  2  3
1  0  1  2
 

Ответ №3:

вы можете использовать имя столбца, например:

 for col in column_names:
    df[col] = new_row
 

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

1. Не удаляя существующий цикл «для», код следует вставить непосредственно перед печатью(df). Результат в порядке. Спасибо. Мне придется еще раз изучить ваш код.

Ответ №4:

Назначьте новую строку следующей позиции индекса во фрейме данных с помощью .loc.

 import pandas as pd
import numpy as np

column_names = [str(x) for x in range(1,4)]

df= pd.DataFrame(columns=column_names)

new_row = []

for i in range(3):
    new_row.append(i)

df.loc[len(df)] = new_row
 

Если у вас есть несколько строк для добавления в цикл,

 len(df)
 

в.оператор loc гарантирует, что они всегда добавляются в конец.

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

1. Результат выглядит так 1 2 3 / 0 0 1 2

2. Какого результата вы пытаетесь достичь? И является 1 2 3 / 0 0 1 2 заголовки столбцов (1 2 3), затем первый индекс (0), а затем значения (0 1 2)?

3. Результаты, которые должны быть получены, прилагаются в виде картинок в тексте. И, как вы спросили, 123-это столбцы, 0 0 12-первая строка.

Ответ №5:

не на 100% уверен в том, что вы пытаетесь сделать — можете ли вы перефразировать?

 import pandas as pd

column_names = [str(x) for x in range(1,4)]
df= pd.DataFrame ( columns = column_names )
new_row = []
for i in range(len(df.columns)):
    new_row.append(i)
df = df.append(new_row , ignore_index = True)
for i in df:
    df[i] = new_row
print(df)
 

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

1. Если вы не знаете, что он имеет в виду, на что вы отвечаете?

2. Возникает ошибка. строка 18, в <module> х=ДФ.на[0,я] indexing.py», линия 2080, в метод getitem возвращение супер().__метод getitem__(ключ) indexing.py», линия 2027, в метод getitem вернуться самостоятельно.в obj._get_value(*ключ, takeable=самоуправления._takeable) frame.py», линия 3006, в _get_value серии = самоуправления._get_item_cache(кол) generic.py», линия 3540, в _get_item_cache Лок = самоуправления.столбцы.get_loc(пункт) base.py», линия 2897, в get_loc поднять KeyError(ключ) от ошибаться KeyError: 0

3. Спасибо @Aryerez, к сожалению, у меня нет репутации, чтобы иметь возможность комментировать. Я думаю, что вышесказанное должно делать то, что вы хотите.

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