Проблема с добавлением фрейма данных: попытка добавить фрейм данных один за другим в список внутри цикла for - PullRequest
0 голосов
/ 02 октября 2019

это операция, где в значении в столбце месяца должно быть 1,2,3,4, но значение 4-го месяца перезаписывает все предыдущее значение Прикрепленное изображениеданных, которые я пытаюсь изменить список добавленных значений перезаписывается последним значением цикла for, не уверен, что здесь пропущено, пробовал и concat, и append, оба из них не дают ожидаемого вывода

import pandas as pd
from datetime import datetime as dt

file_name = r"file_path"

df1=pd.read_excel(file_name)
df1.dropna(axis=1, how='all', thresh=20, subset= None, inplace=True)
df1=df1[df1.col1 != "xyz"]
df2=df1.iloc[:,0:1]
df3=df1.iloc[:,2:]

######### first try ######################
## In this try the values in the list were all overwritten by the last 
values from the loop ##

df=pd.DataFrame([])
for i in range(len(df3.columns.values)):
     df4.assign(col1=lambda x: df2.iloc[:,0],
           col2=lambda x: df3.columns[i].year,
           col3=df3.columns[i].month,
           col4=df3.iloc[:,i]) 
     print(df4.head(2))
     df.append(df4)


########### second try #####################
## in this try the list was empty when printed##

df=[]
df4=pd.DataFrame(columns=['col1','col2','col3','col4'])
for i in range(len(df3.columns.values)):
     df4['col1']=df2.iloc[:,0]
     df4['col2']=df3.columns[i].year
     df4['col3']=df3.columns[i].month
     df4['col4']=df3.iloc[:,i]
     df.append(df4)
print(df)

Нет ошибок, ожидаемый результат состоит в том, что в списке должны быть значения df4 для фреймов данных для каждой итерации значений цикла for.

Получены результаты, когда последнее значение из цикла перезаписывает всеэлементы списка

1 Ответ

0 голосов
/ 03 октября 2019
for i in range(len(df3.columns.values)):                                                        
    y=1+i
    y=pd.DataFrame(columns=['col1','col2','col3','col4'])
    y['col1']=df2.iloc[:,0]
    y['col2']=df3.columns[i].year
    y['col3']=df3.columns[i].month
    y['col4']=df3.iloc[:,i]
    df.append(y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...