我应该如何从熊猫数据框中构造这个 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 返回的主要内容,如果未能解决你的问题,请参考以下文章

如何从字典列表中提取数据到熊猫数据框中?

如何在熊猫数据框中读取嵌套的 json 文件?

如何选择数据框中列的前 3 个值 - 熊猫

在熊猫数据框中读取嵌套 JSON 时遇到问题

如何从熊猫数据框中的时间戳列中删除时区

用上一列中的值填充熊猫数据框中的“无”值