gpt4 book ai didi

Python 使用 if 函数 : ValueError:Truth value of a Series is ambiguous. 使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

转载 作者:行者123 更新时间:2023-12-01 01:49:55 25 4
gpt4 key购买 nike

我知道这个问题以前被问过,但每个案例都不同......我的请求是这样的:

df = pd.read_csv(‘file.csv’)
# convert the string into a datetime object
time = pd.to_datetime(df.dttm_utc)
Month=time.dt.month
Day=time.dt.day
Hour=time.dt.Hour
InDayLightSavings=True
if (Month<3): InDayLightSavings=False
if (Month==3) and (Day<11) and (Hour<2): InDayLightSavings=False
if (Month>11): InDayLightSavings=False
if (Month==11) and (Day>4)and (Hour>=2): InDayLightSavings=False

if (InDayLightSavings):
time=time-datetime.timedelta(hours=1)

正如您猜对的那样,它返回,系列的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。我将其与时间戳一起使用,之前将其更改为 ISO8601,此方法有效,但显然不适用于系列。我尝试添加 .any() 但它不起作用。我也按照其他线程中的建议将 and 更改为 & 。我的 file.csv 的一部分如下所示,运行到 2012 年底:

timestamp	  dttm_utc	          value
1325376300 2012-01-01 0:05:00 16.9444
1325376600 2012-01-01 0:10:00 16.6837
1325376900 2012-01-01 0:15:00 16.6837
1325377200 2012-01-01 0:20:00 16.9444
1325377500 2012-01-01 0:25:00 16.1623
1325377800 2012-01-01 0:30:00 16.6837
期望的输出:包括 15 分钟间隔内的数据示例

3/13/2016 1:00	51
3/13/2016 1:15 48
3/13/2016 1:30 50.4
3/13/2016 1:45 51
3/13/2016 3:00 47.4
3/13/2016 3:15 49.8
3/13/2016 3:30 51
3/13/2016 3:45 51
3/13/2016 4:00 48.6

感谢任何帮助。谢谢!

最佳答案

您看到的异常是由于您尝试根据一组单一条件评估包含许多不同条目的系列。简而言之,让我们看看您做了什么:

错误分析(为什么不这样做):

首先,您确实获取了 pandas 数据框列,然后将其转换为日期时间,这当然也返回一个列(系列)。

time = pd.to_datetime(df.dttm_utc) # Convert content of dttm_utc COLUMN to datetime
# This returns a dataframe COLUMN / series
Month = time.dt.month # Convert content of your COLUMN/series to month
Day = time.dt.day # Convert content of your COLUMN/series to month
Hour = time.dt.Hour # Convert content of your COLUMN/series to month

您的错误:然后您尝试评估该系列中的具体条件:

if (Month == whatever_condition): 
do_something()

但是,您不能将单个条件与一系列条件进行比较,至少不能这样。 Python 不知道您指的是本系列中的哪个条目,因为其中的某些值可能与其他值不同。这意味着,对于该系列中的某些项目,可能满足条件,而对于其他项目则不满足。因此,ValueError:一系列的真值不明确

您想要做什么:

逐项评估,最好以矢量化方式评估。我的建议:始终留在 pandas 数据框中:

df['Datetime'] = pd.to_datetime(df['dttm_utc']) # Add second column with datetime format
df['Month'] = df.Datetime.dt.month # Extract month and add to new column
# Same for day
df.loc[(df.Month < 3), 'InDayLightSavings'] = False
# You can add multiple conditions here
# Finally, your filter:
df.loc[(df.InDayLightSavings == True), 'Time'] = df['Time'] - dt.timedelta(hours=1)
# dt when import datetime as dt, else just datetime

进一步阅读here , here , herehere .

关于Python 使用 if 函数 : ValueError:Truth value of a Series is ambiguous. 使用 a.empty、a.bool()、a.item()、a.any() 或 a.all(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50828894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com