Как преобразовать фрейм данных на основе условий if, else? - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь создать функцию, которая преобразует фрейм данных на основе определенных условий, но я получаю ошибку Systax. Я не уверен, что я делаю неправильно. Любая помощь будет оценена. Спасибо!

import pandas as pd  
from datetime import datetime
from datetime import timedelta
df=pd.read_csv('example1.csv')
df.columns =(['dtime','kW'])
df['dtime'] = pd.to_datetime(df['dtime'])
df.head(5)
           dtime        kW
0   2019-08-27 23:30:00 0.016
1   2019-08-27 23:00:00 0
2   2019-08-27 22:30:00 0.016
3   2019-08-27 22:00:00 0.016
4   2019-08-27 21:30:00 0

def transdf(df):
    a=df.loc[0,'dtime']
    b=df.loc[1,'dtime']
    c=a-b
    minutes = c.total_seconds() / 60
    d=int(minutes)
    #d can be only 15 ,30 or 60
    if d==15:
        return df=df.set_index('dtime').asfreq('-15T',fill_value='Missing')
    elif d==30:
        return df=df.set_index('dtime').asfreq('-30T',fill_value='Missing')
    elif d==60:
        return df=df.set_index('dtime').asfreq('-60T',fill_value='Missing')
    else:
        return None

1 Ответ

1 голос
/ 19 октября 2019

первый. Более эффективно иметь оператор return после else в конце вашего кода. Внутри каждого случая просто обновите значение для df. Return - это часть вашей функции, а не оператор if, поэтому вы получаете ошибки.

def transform(df):
 a = df.loc[0, 'dtime']
 b = df.loc[1, 'dtime']
 c = a - b
 minutes = c.total_seconds() / 60
 d=int(minutes)
 #d can be only 15 ,30 or 60
 if d==15:
   df= df.set_index('dtime').asfreq('-15T',fill_value='Missing')
 elif d==30:
   df= df.set_index('dtime').asfreq('-30T',fill_value='Missing')
 elif d==60:
   df= df.set_index('dtime').asfreq('-60T',fill_value='Missing')
 else:
   None
 return dfere
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...