如何基于if,else条件转换数据框?

时间:2019-10-18 23:18:29

标签: python-3.x pandas

我正在尝试构建一个可根据特定条件转换数据帧的函数,但出现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 个答案:

答案 0 :(得分:1)

第一。将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