如何将一系列单值转换为仅浮点数?

问题描述 投票:0回答:5

我有一个只有一个值的系列,我只想获取该值。我运行了一个代码来通过索引匹配来获取值,我得到了一个像这样的系列:

(normal_sum['KWH'][(normal_sum['KWH'].index == date)])

Timestamp
2017-04-02    2934.93
Freq: D, Name: KWH, dtype: float64

但是当我尝试将其转换为这样的浮点数时,

float(normal_sum['KWH'][(normal_sum['KWH'].index == date)])

它抛出一个错误:

TypeError: cannot convert the series to <type 'float'>

预期的输出只是数字本身,而不是在任何表或数组中: 2934.93

如有任何帮助,我们将不胜感激。

#有编辑:

我面临另一个问题:

假设我得到一个空系列,那么如何将其转换为零。

我这样做了:

(normal_sum['KWH'][(normal_sum['KWH'].index == date)])

有一个这样的系列:

Series([], Freq: D, Name: KWH, dtype: float64)
python pandas dataframe series
5个回答
10
投票

使用

loc

normal_sum.loc[date, 'KWH']

参见@MaxU的回答

at


还有

get_value

normal_sum.get_value(date, 'KWH')

要在日期不在索引中时返回零,您可以

normal_sum.KWH.get(date, 0)

7
投票

如果数据系列中只有一个元素,您可以通过调用

tolist()
将其转换为列表,并通过引用
[0]
获取新列表的第一个元素。


5
投票

现在(从什么时候开始?)有一个专门的功能:

normal_sum.item()

该方法的一个优点是,如果不正好有一个项目,它将引发异常。


2
投票

我们可以使用 Series.at[...] 方法进行 scalar 查找:

In [138]: normal_sum = pd.Series([1.234], index=['KWH'])

In [139]: normal_sum
Out[139]:
KWH    1.234
dtype: float64

In [140]: normal_sum.at['KWH']
Out[140]: 1.234

1
投票

正如它所说,您正在尝试将系列转换为浮点数,这是不可能的。一个系列可能有多个条目,并且每个条目不必是浮点数或整数,它可以是任何东西。所以你必须选择你的特定条目,或者使用(不好的方式):

normal_sum['KWH'].loc[0]

normal_sum['KWH'].iloc[date]

编辑:应避免像以前那样进行链式索引,以下方法更好。

如果您直接从数据帧中选择(而不是从系列 normal_sum['KWH'] 中选择),您可以这样做:

normal_sum.iloc[0,0]

normal_sum.loc[date, 'KWH']
© www.soinside.com 2019 - 2024. All rights reserved.