#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. Пожалуйста, добавьте дополнительные сведения, чтобы расширить свой ответ, например, ссылки на рабочий код или документацию.