Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧无法识别多个if语句_Python_Pandas_Numpy_Indexing - Fatal编程技术网

Python 数据帧无法识别多个if语句

Python 数据帧无法识别多个if语句,python,pandas,numpy,indexing,Python,Pandas,Numpy,Indexing,我有一个如下所示的数据框,小时列是一系列整数: |Hour| 0|23 | 1|14 | 2|6 | 3|2 | 我期望的输出如下: |Hour| TimeofDay | 0|23 | Late Evening| 1|14 | Mid Day | 2|6 | Morning | 3|2 | Morning | |Hour| TimeofDay | 0|23 | Morning | 1|14

我有一个如下所示的数据框,小时列是一系列整数:

  |Hour| 
 0|23  |
 1|14  |
 2|6   |
 3|2   |
我期望的输出如下:

  |Hour| TimeofDay   |
 0|23  | Late Evening|
 1|14  | Mid Day     |
 2|6   | Morning     |
 3|2   | Morning     |
  |Hour| TimeofDay   |
 0|23  | Morning     |
 1|14  | Morning     |
 2|6   | Morning     |
 3|2   | Morning     |
为了实现这个结果,我使用了以下代码行:

for index, row in df.iterrows():
    if row["Hour"] > 16:
        df['TimeofDay'] = "Late Evening"
    elif np.logical_and(row["Hour"] > 8 , row["Hour"] <= 16):
        df['HarshEventTime'] = "Mid Day"
    else :    
        df['HarshEventTime'] = "Morning"

我的if语句没有正确读取我的条件,这有什么原因吗?

我认为您使用了不同的列来写一天中的时间

for index, row in df.iterrows():
    if row["Hour"] > 16:
        df['TimeofDay'] = "Late Evening" #here 'TimeofDay'
    elif np.logical_and(row["Hour"] > 8 , row["Hour"] <= 16):
        df['HarshEventTime'] = "Mid Day" #here 'HarshEventTime'
    else :    
        df['HarshEventTime'] = "Morning" #here 'HarshEventTime'
对于索引,df.iterrows()中的行:
如果第[“小时”]>16行:
df['TimeofDay']=“深夜”#这里是'TimeofDay'

elif np.logical_and(row[“Hour”]>8,row[“Hour”]我发现在if语句中使用pandas的.loc函数更容易,对于您想要的输出,代码如下所示:

df['TimeofDay'] = "Morning"
df.loc[(df["Hour"] > 8) & (df["Hour"] <= 16), 'TimeofDay'] = "Late Evening"
df.loc[df['Hour'] > 16, 'TimeofDay'] = "Late Evening"
df['TimeofDay']=“早晨”
df.loc[(df[“Hour”]>8)和(df[“Hour”]16,“一天的时间”]=“深夜”

从你的另一个语句开始,然后应用任何改变该列的条件。

你也可以考虑使用NUMPY SELECT:

conditions = [df['Hour'] > 16, df['Hour'] > 8, df['Hour'] <= 8]
choices = ['Late Evening', 'Mid Day', 'Morning']

df['TimeofDay'] = np.select(conditions, choices)

conditions=[df['Hour']>16,df['Hour']>8,df['Hour']对于初学者来说,不需要为此迭代数据帧。广播将更清晰、更高效。
numpy.where
可能会有所帮助,但第一条语句可以在本地完成。不需要迭代。它既混乱又低效。也许可以改为使用广播。