Невозможно присвоить значения столбцу фрейма данных pandas из итерации по списку - PullRequest
0 голосов
/ 29 июня 2018

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

Sp=pd.DataFrame()
l1=['a', 'b', 'c']
for i in l1:
    Sp['col1'] = i

Дает мне результат Sp как:

col1

Я бы хотел, чтобы у моего col1 были значения a, b и c. Может ли кто-нибудь подсказать, почему это происходит, и как это исправить.

EDIT:

Для каждого значения в моем списке я использую его для подключения к другому файлу с помощью os (имена файлов состоят из значений списка). После получения оттуда файла csv я беру такие значения, как среднее значение, отклонение и т. Д. Данных из файла, и присваиваю эти значения sp в другом столбце. Мой последний sp должен выглядеть примерно так:

col1    Mean    Median  Deviation
a       1       1.1     0.5
b       2       2.1     0.5
c       3       3.1     0.5

1 Ответ

0 голосов
/ 29 июня 2018

EDIT: если необходимо для каждого цикла создать DataFrame и обработать его, выполнить итерацию и, наконец, DataFrame добавить в список DataFrames. Последний concat все агрегированные кадры данных вместе:

dfs = []
l1 = ['a', 'b', 'c']
for i in l1:
    df = pd.read_csv(file)
    df = df.groupby('col').agg({'col1':'mean', 'col2':'sum'})
    #another code
    dfs.append(df)

Sp = pd.concat(dfs, ignore_index=True)

Старый ответ:

Я думаю, нужно вызвать DataFrame конструктор с list:

Sp = pd.DataFrame({'col1':l1})

Если это действительно нужно, но это самое медленное из возможных решений 1017 *:

6) обновление пустого фрейма по одной строке за раз . Я видел, что этот метод использовал слишком много. Это безусловно самый медленный. Это, вероятно, обычное место (и достаточно быстрое для некоторых структур Python), но DataFrame выполняет достаточное количество проверок при индексировании, поэтому обновление строки всегда будет происходить очень медленно. Гораздо лучше создавать новые структуры и конкатать.

Sp=pd.DataFrame()
l1=['a', 'b', 'c']
for j, i in enumerate(l1):
    Sp.loc[j, 'col1'] = i

print (Sp)
  col1
0    a
1    b
2    c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...