在 Python 数据框中获取一天的一部分(早上、下午、晚上、晚上) [英] Get part of day (morning, afternoon, evening, night) in Python dataframe

查看:35
本文介绍了在 Python 数据框中获取一天的一部分(早上、下午、晚上、晚上)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的数据框,我需要根据行值的时间小时创建一个新列(早上,下午,晚上,晚上)

Here is my dataframe , I need to create a new column based on the timehour which the row value be like (morning, afternoon, evening, night)

这是我的代码

if ((prods['hour'] < 4) & (prods['hour'] > 8 )):
    prods['session'] = 'Early Morning'
elif ((prods['hour'] < 8) & (prods['hour'] > 12 )):
    prods['session'] = 'Morning'
elif ((prods['hour'] < 12) & (prods['hour'] > 16 )):
    prods['session'] = 'Noon'
elif ((prods['hour'] < 16) & (prods['hour'] > 20 )):
    prods['session'] = 'Eve'
elif ((prods['hour'] < 20) & (prods['hour'] > 24 )):
    prods['session'] = 'Night'
elif ((prods['hour'] < 24) & (prods['hour'] > 4 )):
    prods['session'] = 'Late Night'

这是我得到的错误

ValueError Traceback(最近一次调用最后)在----> 1 if (prods['hour'] > 4 and prods['hour']< 8):2 prods['session'] = '清晨'3 elif (prods['hour'] > 8 and prods['hour'] <12):4 prods['session'] = '早上'5 elif (prods['hour'] > 12 and prods['hour'] <16):

ValueError Traceback (most recent call last) in ----> 1 if (prods['hour'] > 4 and prods['hour']< 8): 2 prods['session'] = 'Early Morning' 3 elif (prods['hour'] > 8 and prods['hour'] < 12): 4 prods['session'] = 'Morning' 5 elif (prods['hour'] > 12 and prods['hour'] < 16):

/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py 中非零(self) 1476 raise ValueError("{0} 的真值不明确." 1477 "Use a.empty,a.bool()、a.item()、a.any() 或 a.all()."-> 1478 .format(self.class.name)) 1479 1480 bool = 非零

/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py in nonzero(self) 1476 raise ValueError("The truth value of a {0} is ambiguous. " 1477 "Use a.empty, a.bool(), a.item(), a.any() or a.all()." -> 1478 .format(self.class.name)) 1479 1480 bool = nonzero

ValueError:系列的真值不明确.使用 a.empty,a.bool()、a.item()、a.any() 或 a.all().

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

请帮忙

推荐答案

使用 cut 或带有 and 的自定义函数,并将 < 更改为 >><= 并且还为每个值添加 return:

Use cut or custom function with and and also changed < to > and > to <= and also for each value add return:

prods = pd.DataFrame({'hour':range(1, 25)})

b = [0,4,8,12,16,20,24]
l = ['Late Night', 'Early Morning','Morning','Noon','Eve','Night']
prods['session'] = pd.cut(prods['hour'], bins=b, labels=l, include_lowest=True)

<小时>

def f(x):
    if (x > 4) and (x <= 8):
        return 'Early Morning'
    elif (x > 8) and (x <= 12 ):
        return 'Morning'
    elif (x > 12) and (x <= 16):
        return'Noon'
    elif (x > 16) and (x <= 20) :
        return 'Eve'
    elif (x > 20) and (x <= 24):
        return'Night'
    elif (x <= 4):
        return'Late Night'

<小时>

prods['session1'] = prods['hour'].apply(f)
print (prods)
    hour        session       session1
0      1     Late Night     Late Night
1      2     Late Night     Late Night
2      3     Late Night     Late Night
3      4     Late Night     Late Night
4      5  Early Morning  Early Morning
5      6  Early Morning  Early Morning
6      7  Early Morning  Early Morning
7      8  Early Morning  Early Morning
8      9        Morning        Morning
9     10        Morning        Morning
10    11        Morning        Morning
11    12        Morning        Morning
12    13           Noon           Noon
13    14           Noon           Noon
14    15           Noon           Noon
15    16           Noon           Noon
16    17            Eve            Eve
17    18            Eve            Eve
18    19            Eve            Eve
19    20            Eve            Eve
20    21          Night          Night
21    22          Night          Night
22    23          Night          Night
23    24          Night          Night

这篇关于在 Python 数据框中获取一天的一部分(早上、下午、晚上、晚上)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆