Python Use if函数:V真值误差一个系列是模棱两可的。使用a.empty、a.bool()、a.item()、a.any()或a.all()

2024-09-30 01:27:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道以前有人问过这个问题,但每个案子都不一样。。。我的请求是:

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,这个方法有效,但显然它不适用于series。我尝试添加.any(),但它不起作用。我也会按照其他帖子中的建议更改和。 我的标准杆文件.csv看起来是这样,一直持续到2012年底:

期望输出: Include是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

任何帮助都是谢谢。谢谢你!在


Tags: andcsvfalsedfdatetimeiftimedt
2条回答

您看到的异常是由于您试图根据一组单个条件来计算包含多个不同条目的序列。 简单地说,让我们来看看你是做什么的:

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

首先,您获取了pandas dataframe列,然后将其转换为datetime,当然,datetime还返回一个列(series)。

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

你的错误:然后你试着评估一系列的具体情况:

^{pr2}$

但是,你不能把一个条件和一个序列相比较,至少不是这样。Python不知道您指的是系列中的哪个条目,因为其中的某些值可能与其他条目不同。这意味着,对于系列中的某些项,条件可能满足,而对于其他项则不满足。因此ValueError: The truth value of a series is ambiguous。在

你想做什么:

逐项评估,最好是以矢量化的方式。我的建议:始终保持在熊猫数据框中:

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

进一步阅读hereherehere和{a4}。在

用&;代替and怎么样?在

or和python语句需要真值。 我们这样做是因为在pandas中这些被认为是不明确的,所以我们应该使用位运算符“|”(or)或“&;”(and)运算。在

if (Month<3): InDayLightSavings=False
if (Month==3) & (Day<11) & (Hour<2): InDayLightSavings=False
if (Month>11): InDayLightSavings=False
if (Month==11) & (Day>4) & (Hour>=2): InDayLightSavings=False

我不得不这么说,但我不能这么说

相关问题 更多 >

    热门问题