我有一个DatetimeIndex的数据框架。这是其中一列:
>>> y.out_brd
2013-01-01 11:25:00 0.04464286
2013-01-01 11:30:00 NaN
2013-01-01 11:35:00 NaN
2013-01-01 11:40:00 0.005952381
2013-01-01 11:45:00 0.01785714
2013-01-01 11:50:00 0.008928571
Freq: 5T, Name: out_brd, dtype: object
当我尝试在函数上使用interpolate()
时,我完全没有任何变化:
>>> y.out_brd.interpolate(method='time')
2013-01-01 11:25:00 0.04464286
2013-01-01 11:30:00 NaN
2013-01-01 11:35:00 NaN
2013-01-01 11:40:00 0.005952381
2013-01-01 11:45:00 0.01785714
2013-01-01 11:50:00 0.008928571
Freq: 5T, Name: out_brd, dtype: object
如何让它工作?
更新:生成这样的 Dataframe 的代码。
time_index = pd.date_range(start=datetime(2013, 1, 1, 3),
end=datetime(2013, 1, 2, 2, 59),
freq='5T')
grid_columns = [u'in_brd', u'in_alt', u'out_brd', u'out_alt']
df = pd.DataFrame(index=time_index, columns=grid_columns)
然后,我用一些数据填充单元格。
我有dataframe field_data
,其中包含关于在铁路上上下车的调查数据,以及station
变量。我也有一个interval_end
函数定义如下:
interval_end = lambda index, prec_lvl: index.to_datetime() \
+ timedelta(minutes=prec_lvl - 1,
seconds=59)
代码:
for index, row in df.iterrows():
recs = field_data[(field_data.station_name == station)
& (field_data.arrive_time >= index.time())
& (field_data.arrive_time <= interval_end(
index, prec_lvl).time())]
in_recs_num = recs[recs.orientation == u'in'][u'train_number'].count()
out_recs_num = recs[recs.orientation == u'out'][u'train_number'].count()
if in_recs_num:
df.loc[index, u'in_brd'] = recs[
recs.orientation == u'in'][u'boarding'].sum() / \
(in_recs_num * CAR_CAPACITY)
df.loc[index, u'in_alt'] = recs[
recs.orientation == u'in'][u'alighting'].sum() / \
(in_recs_num * CAR_CAPACITY)
if out_recs_num:
df.loc[index, u'out_brd'] = recs[
recs.orientation == u'out'][u'boarding'].sum() / \
(out_recs_num * CAR_CAPACITY)
df.loc[index, u'out_alt'] = recs[
recs.orientation == u'out'][u'alighting'].sum() / \
(out_recs_num * CAR_CAPACITY)
5条答案
按热度按时间to94eoyn1#
您需要将
Series
转换为float64
而不是当前的object
。这里有一个例子来说明两者的区别。请注意,通常object
dtypeSeries
的使用有限,最常见的情况是Series
包含字符串。除此之外,它们非常慢,因为它们不能利用任何数据类型信息。kx5bkwkv2#
我迟到了,但这解决了我的问题。你需要将结果赋给某个变量或它本身。
jhdbpxl93#
您也可以在不更改数据框名称的情况下使用函数“in place”来修复此问题:
lokaqttq4#
菲利普的简短回答,我第一次错过了,回来回答:
你需要一个浮动系列:
to94eoyn5#
遇到了类似的问题,
interpolate
什么都不做。问题在于,要插值的值是0,而不是
np.nan
。您需要确保有np.nan
值需要插值。例如: