создайте фрейм данных panda и добавьте значения в цикл for

#python #list #dataframe #append

#python #Список #фрейм данных #добавить

Вопрос:

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

 tuples = pd.DataFrame()
for index, row in expertsDF.iterrows():
      newlst = row['name'] 
      counter = 0
      for x in newlst:
        if counter < len(newlst) - 3:
            tuples['A'] = x
            tuples['B'] =newlst(counter 1)
            tuples['C'] =newlst(counter 2)
            tuples['D'] =newlst(counter 3)
            counter = counter   1
  

новое значение выглядит следующим образом:

 list (var1, var2, var3....)
  

и мой фрейм данных должен быть таким:

      A       B      C       D
1   var1   var2   var3    var4
2   var2   var3   var4    var5
3   var3   var4   var5    var6
  

Есть ли способ сделать это в python?

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

1. не могли бы вы опубликовать образец своего вывода?

2. код внутри условия if неверен, поэтому у меня нет выходных данных. Я просто попытался показать, что я пытаюсь сделать.

3. хорошо, @345243lkj готово!

4. извините, что такое expertsDF.iterrows() ?

5. это из библиотеки itertools. Я использовал его для перебора исходного фрейма данных, где хранятся мои значения.

Ответ №1:

Это близко?

 import pandas as pd
tuples = pd.DataFrame(columns=['A', 'B', 'C', 'D'])
newlst = "abcdefg"
i = 0
for x in newlst:
    if i < len(newlst) - 3:
        t = pd.DataFrame([[x, newlst[i   1], newlst[i   2], newlst[i   3]]],
                         columns=['A', 'B', 'C', 'D'])
    tuples = tuples.append(t, ignore_index=True)
    i  = 1
print tuples
  

Это печатает:

    A  B  C  D
0  a  b  c  d
1  b  c  d  e
2  c  d  e  f
3  d  e  f  g
  

Ответ №2:

Как насчет создания фрейма данных из объектов серии?

 import pandas as pd

data_list = list(map(lambda x: 'var{}'.format(x),range(0,100)))
df = pd.Series(data_list[0:97]).to_frame(name='A')
df['B'] = pd.Series(data_list[1:98])
df['C'] = pd.Series(data_list[2:99])
df['D'] = pd.Series(data_list[3:100])

df.head()

# output
#       A     B     C     D
# 0  var0  var1  var2  var3
# 1  var1  var2  var3  var4
# 2  var2  var3  var4  var5
# 3  var3  var4  var5  var6
# 4  var4  var5  var6  var7