我应该如何从熊猫数据框中构造这个 json 返回
Posted
技术标签:
【中文标题】我应该如何从熊猫数据框中构造这个 json 返回【英文标题】:How should I construct this json return from a pandas dataframe 【发布时间】:2019-11-03 00:32:29 【问题描述】:我有一些数据,按日期组织,datetime index。然后我对其进行子集化,使其实际上是不规则的:
date_rng = pd.date_range(start='1/1/2018', end='1/8/2018', freq='H')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date', drop=True)
df = df[df['data'] > 75]
在我的服务中(这不是交互式使用)我得到一个字符串,我将它传递给pandas.resample
以将我的时间数据汇总到任何级别。该字符串直接提供给rule
参数,可以是'H'
、'3T'
、'Q'
、'M'
等值
我想用相同的字符串来创建一个类似于以下结构的json:
'my_aggregate_level_1': '2018-01-01 03:00:00', '2018-01-01 07:00:00',
'my_aggregate_level_2':'2018-01-08 03:00:00'
数组将“参差不齐”,即并非所有记录都存在,并且 json 中的所有键都不会具有相同的数组长度。
一个好的解决方案的目标是:
my_aggregate_level
是由与resample
相同的字符串参数设置的级别
聚合级别中的数组将始终是原始的日期时间每小时值
理想情况下字符串参数不与一堆'翻译规则'相关联,例如“如果'D'
然后像这样使用.strftime
,但是如果'H'
使用这个,如果'M'
使用这个
'H'
只会返回一个包含原始值的数组
所以在实践中,如果提供了'D'
:
'2018-01-01': '2018-01-01 03:00:00', '2018-01-01 07:00:00',
'2018-01-08':'2018-01-08 03:00:00'
请注意,每天有两个键,数组中的值拆分为正确的日期。
如果提供了'M'
:
'2018-01': '2018-01-01 03:00:00', '2018-01-01 07:00:00', '2018-01-08 03:00:00'
请注意,这意味着在本例中值数组的内容将为 3,因为 3 个日期时间都在同一个月内
我尝试过/看过但效果不佳的事情:
Groupers
,它们看起来只是基于某些规则进行聚合。我特别需要返回实际记录
根据rule
参数解析一个新列在技术上是可行的,但它似乎是错误的,因为我必须开始将每个rule
转换为strftime
或类似的。我还没有找到一个接受相同字符串并且不执行聚合的函数
设置多索引是否可以解决此问题?可能是这样,但我不确定如何填充上面关于'D'
、'M'
等的内容。
自定义重采样器:
def custom_resampler(array_like):
return array_like
df.resample('W').apply(custom_resampler)
这不起作用。
我了解,这可能是上面的规则无法解决的问题,但我可能还不够擅长pandas
尚未意识到这一点。
【问题讨论】:
【参考方案1】:更新:
返回结构实际上是一个序列,因此可以使用此方法过滤空列表索引点:
df.resample('D').apply(custom_resampler).apply(len) > 0
原文:
我相信我已经找到了解决方案。
具体来说,我错误地使用了自定义重采样器,实际上它们可以自己进行 json 转换。我需要进行一些处理才能得到我需要的结果,但现在这就是答案:
def custom_resampler(array_like):
return array_like.to_json()
df.resample('D').apply(custom_resampler)
很高兴对此进行纠正/完善/改进。
【讨论】:
经过测试,这只是部分内容。它将返回用空列表估算的每一天/每月的完整索引,这是不正确的。'my_aggregate_level_1'
应该只在它包含值时出现。以上是关于我应该如何从熊猫数据框中构造这个 json 返回的主要内容,如果未能解决你的问题,请参考以下文章