【问题标题】:why do I keep getting the same answer with this conditional, python pandas为什么我对这个有条件的 python pandas 总是得到相同的答案
【发布时间】:2016-08-11 00:49:19
【问题描述】:

这可能是一个非常愚蠢的问题,但我已经坚持了一段时间。

这是 csv

DATE,TIME,OPEN,HIGH,LOW,CLOSE,VOLUME
02/03/1997,09:30:00,3045.00,3045.00,3045.00,3045.00,28 
02/04/1997,09:30:00,3077.00,3078.00,3077.00,3077.50,280
02/05/1997,09:30:00,3094.00,3094.50,3094.00,3094.00,50 
02/06/1997,09:30:00,3106.00,3107.50,3106.00,3107.50,53
02/07/1997,09:30:00,3144.00,3144.00,3143.50,3143.50,15 
02/06/1997,16:20:00,3126.50,3126.50,3126.00,3126.00,24           
02/06/1997,16:21:00,3126.50,3128.00,3126.50,3128.00,169          
02/06/1997,16:22:00,3128.00,3128.00,3126.00,3126.00,243          
02/06/1997,16:23:00,3125.50,3126.50,3125.50,3125.50,26           

这只是我从原件制作的示例,因为原件真的很长。我将所有“09:30:00”移到顶部以使其更容易。

但这是我的代码。

 df = pd.read_csv('example.txt', parse_dates = [["DATE", "TIME"]], index_col=0)

b930 = df.HIGH.at_time("09:30:00")

a=0
if 'b930 < 3044.00':
  a = 7
else:
  a = 10

print a 

如果我以这种方式运行它,我会得到一个我可能不应该的 7。

a=0
if 'b930 > 3044.00':
   a = 7
else:
   a = 10

print a

如果我以这种方式运行它,我会得到 7,这很好。

老实说,我已经尝试了很多其他的东西,但我都删除了。

【问题讨论】:

    标签: python-2.7 date pandas dataframe


    【解决方案1】:

    您使用 Series,因此您必须使用 allany

    b930 = df.HIGH.at_time("09:30:00")
    print b930
    DATE_TIME
    1997-02-03 09:30:00    3045.0
    1997-02-04 09:30:00    3078.0
    1997-02-05 09:30:00    3094.5
    1997-02-06 09:30:00    3107.5
    1997-02-07 09:30:00    3144.0
    
    #ValueError: The truth value of a Series is ambiguous. 
    # Use a.empty, a.bool(), a.item(), a.any() or a.all().
    if b930 < 3044.00:
      a = 7
    else:
      a = 10
    print a 
    

    检查all 的值是否为True

    print b930 < 3046.00
    DATE_TIME
    1997-02-03 09:30:00     True
    1997-02-04 09:30:00    False
    1997-02-05 09:30:00    False
    1997-02-06 09:30:00    False
    1997-02-07 09:30:00    False
    Name: HIGH, dtype: bool
    
    a=0
    if (b930 < 3046.00).all():
      a = 7
    else:
      a = 10
    print a
    10
    

    检查any 的值是否为True

    if (b930 < 3046.00).any():
      a = 7
    else:
      a = 10
    print a
    7
    

    另一个例子:

    print b930 > 3044.00
    DATE_TIME
    1997-02-03 09:30:00    True
    1997-02-04 09:30:00    True
    1997-02-05 09:30:00    True
    1997-02-06 09:30:00    True
    1997-02-07 09:30:00    True
    Name: HIGH, dtype: bool
    
    a=0
    if (b930 > 3044.00).all():
      a = 7
    else:
      a = 10
    print a
    7
    
    if (b930 > 3044.00).any():
      a = 7
    else:
      a = 10
    print a
    7
    

    【讨论】:

      【解决方案2】:

      这是一个非空字符串,将始终转换为True

      'b930 < 3044.00'
      

      改成:

      b930 < 3044.00
      

      【讨论】:

        猜你喜欢
        • 2019-04-21
        • 2022-07-26
        • 1970-01-01
        • 2021-11-18
        • 2021-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多