【问题标题】:Accessing a value corresponding to a timestamp from a database returns a Series instead of a single numpy.float64 value从数据库访问与时间戳对应的值会返回一个 Series 而不是单个 numpy.float64 值
【发布时间】:2019-10-26 21:33:40
【问题描述】:

我有两个代码,下面将详细解释。

代码 1:读取 .csv 文件,其中包含时间戳作为一列,每个时间戳的对应值作为另一列。

代码 2:读取数据库并从具有两列的数据库中获取数据 - 时间戳作为一列,每个时间戳的对应值作为另一列。

对于代码 1,当我尝试访问/打印与时间戳对应的值时,它会打印一个 numpy.float64 值。这就是我希望我的输出的方式。

但是,对于代码 2,当我尝试打印与时间戳对应的值时,它会打印一个具有一个对象类型值的系列。

即使从技术上讲,两者都是数据帧,为什么会有差异以及导致输出差异的原因是什么?我该如何纠正这个问题?

尝试了以下方法:

  1. 将对象类型转换为 numpy.float64。仍然返回一个系列。
  2. 读取数据库,将其转换为 .csv 格式,再次读取 .csv 文件并尝试访问。仍然返回一个系列。

    from_db = MySQLdb.connect("xx.xx.xx.xx", "abcde", "12345", "TABLE_DB")
    
    sql = "SELECT * FROM `SOME_TABLE` WHERE `THIS IS` = '123456'"
    
    dmd_data = pd.read_sql(sql, con=from_db)
    
    dmd_data = dmd_data.NAME
    
    start_tstamp = '2016-10-08 00:00:00'
    
    start = datetime.datetime.strptime(start_tstamp,f)
    
    fact1 = (start-datetime.timedelta(days=1)).strftime(f)
    

预期输出为:

In [53]: dmd_data[fact1]
Out[53]: 4454.82406196

In [67]: type(dmd_data[fact1])
Out[67]: numpy.float64

我得到的输出是:

In [53]: dmd_data[fact1]
Out[53]: 
TIMESTAMP
2016-10-07    4454.82406196
Name: DEMAND, dtype: object

In [60]: type(data[fact1])
Out[60]: pandas.core.series.Series

【问题讨论】:

    标签: python pandas numpy dataframe series


    【解决方案1】:

    首先将其转换为数据框:

    df = series_data.to_frame()
    // series_data is your data existing in 'pandas.core.series.Series' object form
    

    现在转置结果

    df = df.T
    

    现在访问相应键的值。 如果问题仍然存在,请检查读取数据的数据类型和密钥以及您提供的数据!

    【讨论】:

    • 您提供的解决方案不起作用。 df[fact1] 仍然返回一个 Series 而不是一个 numpy.float64 值。
    • 你能把截图分享给我吗
    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多