【发布时间】:2020-06-23 02:03:47
【问题描述】:
我正在读取文本文件并使用 python defaukt dict 形成 json 来创建数据框,最后创建 parquet 文件。 我创建熊猫数据框和 每行都由时间、源、事件和元数据列唯一标识..还有其他字段,如 COL1、COL2..COl100。
我想创建这样的数据框
数据框
Time EVENT META_DATA SOURCE COL1 COL2 COL3
20200508051804.8340+0730 event1 some meta data source1 10 23
要创建上面的数据框,我需要像下面这样形成 json
d1={'100': {('event1','source1',"some meta data"): {'COL1': 10, 'COL1': 'some'}}}
df=pd.concat([pd.DataFrame(v).T for v in d1.values()], keys=d1.keys()).rename_axis(index=['Time', 'EVENT','source','meta_data']).reset_index()
它工作正常,但要实现这一点,我需要将这些属性的值保持为元组。 寻找另一种存储方式 就像我可以这样存储
d1={'100': {'source1': {'COL1': 10, 'COL1': 'some', 'COL3': 1.1}}, 'EVENT':'event1', 'meta_data':"some meta data"}
并且仍然能够在 DATAFRAME 之上创建
更新1:
输入:
d1={'100': {'source1': {'COL1': 10, 'COL2': '2.3', 'COL3': 1.1},'source2': {'COL1': 19, 'COL2': '3.4', 'COL4': 0.4}, 'EVENT':'event1', 'meta_data':"some metadata1"},'200': {'source1': {'COL1': 10, 'COL2': '0.55', 'COL4': 1.1},'source2': {'COL1': 11, 'COL4': '5.6', 'COL3': 1.1}, 'EVENT':'event2','meta_data':"some meta data2"},'300': {'source3': {'COL1': 15, 'COL2': '.23', 'COL4': 1.1},'source1': {'COL1': 10, 'COL4': '4.7', 'COL3':1.2}, 'EVENT':'event3', 'meta_data':"some meta data3"}}
输出: 熊猫数据框
Time EVENT META_DATA SOURCE COL1 COL2 COL3 COL4
100 event1 some meta data1 source1 10 2.3 1.1
100 event1 some meta data1 source2 19 3.4 0.4
200 event2 some meta data2 source1 10 0.55 1.1
200 event2 some meta data2 source2 11 1.1 5.6
300 event2 some meta data3 source3 15 .23 1.1
300 event2 some meta data3 source1 10 1.2 4.7
EVENT 和 META_DATA 是时间明智的,即。在特定时间总是相同的。
例如:时间 100 有 event1 和 meta data 一些 meta data1。
在特定时间可以有多个来源,每个来源可以与一个或多个相关联(字段即 COL1、COl2、....COL100)。每个来源应位于单独的行中。
例如:source1,source 2属于时间100
【问题讨论】:
-
不确定我是否关注。您是否将 json 作为输入,并且您正在尝试创建数据框 - 反之亦然?具体来说,输入和预期输出是什么?
-
@Roy2012 更新了问题
-
谢谢。你确定输入和输出是准确的吗?输入包含 EVENT':'some event',而输出是 EVENT - event1。这是故意的吗?
-
@Roy2012 谢谢纠正。
-
源是否始终称为“source1”?如果没有,您可以添加另一个具有不同源名称的示例吗?你提前知道源名称的集合吗?