- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在将 CSV 文件转换为 JSON 时,我遇到了一个有趣的问题。我根据 SQLite 查询的输出生成一个 CSV 文件并将其写入硬盘。
然后我使用 Pandas 将 CSV 文件加载到我的脚本中:
import pandas as pd
df_var = pd.read_csv('input.csv',header=0, low_memory=False)
我使用了low_memory选项,因为数据帧由多种数据类型组成。如果有人建议的话,我并不反对将所有内容存储为字符串值。
数据帧的每一行代表一条记录(每条记录有 144 个字段/列),因此我一次剥离一行并将其输入到我构建的一个类中,以将该行转换为字典(位于类):
class CSVParser:
def __init__(self, recordid, tjson={}):
self.recordid = recordid
self.json = tjson
def create_json(self, df):
o_dict = {
'root': {
'id': {
'field1':df['field1'],
'field2':df['field2'],
'field3':self.recordid,
},
'core': {
'field1':df['field1'],
'field2':df['field2'],
'field3':df['field3'],
'field4':df['field4'],
'field5':df['field5'],
'field6':df['field6'],
},
#REMAINING RECORDS LEFT OUT FOR BREVITY
}
}
self.json.append(o_dict)
从这里我将 JSON 写入磁盘
def write_json(self):
#if self is not empty write JSON to file
if self.json:
filename = 'output/' + self.recordid + '_output.json'
with open(filename,'w') as outfile:
json.dump(self.json,outfile, indent=4, separators=(',', ': '))
print('JSON saved to drive')
else:
print('\nEmpty JSON\n')
return(self.json)
这就是我得到的结果,假设我只运行 500 条记录,CSV 文件大小约为 23MB,生成的 JSON 约为 190MB!当然,我无意中添加了一些我似乎找不到的格式。我相信 JSON 文件会产生比 CSV 更小的文件大小。
最后一点信息,我最初使用 OrderedDict 来运行它,但是当我看到生成的 JSON 文件大小时,我想 OrderedDict 可能添加了一些格式,在移回字典之后,这些格式增加了很多大小随着最终文件大小的变化而变化。
如果您需要任何其他信息,请告诉我,我一定会提供。
你有什么想法?
最佳答案
原因很简单,JSON 比 CSV 拥有更多内容。
如果你查看生成的 JSON,你会发现它有很多键,如 field1、field2 等。这是因为 JSON 没有模式的概念。每个条目都可以不同。这些额外的字符占用空间(每个字母 1 个字节)。这些加起来可能会比您的实际数据更多。
除此 JSON 之外,还包含 [,],{,},: 和 , 等字符这些是必不可少的,因为 JSON 也非常易于阅读。
最后,如果您想在更少的空间中转储数据,但仍想使用 JSON,请尝试缩短键。就像使用 f1 而不是 field1。
您还可以将 JSON 转换为列表的列表而不是字典。因为您可以从 SQL 获得该方案。
关于Python CSV 到 JSON : Why is JSON significantly larger than the CSV file and how can it be fixed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42547488/
我已经在线阅读了描述大端字节和小端字节的描述。但是,它们似乎基本上都以相同的方式读取,并且我仍然对“最大”和“最小”有效字节的实际实现感到困惑。我知道,小字节序值首先评估“最低有效”值,而在字节序大时
我已经计算了两个模型实验之间的温差。不同之处在于2D矩阵(长×长)。我想找出温差在95%显着水平上具有统计学意义的网格点,这是基于学生使用MatLab进行的t检验。。现在,我使用了MATLAB中的Tt
我试图在 R 中分析一些嘈杂的时间序列数据。这些数据基于动物的 CO2 排放,它们显示出一种我想表征的循环周期性。我想检验以下假设: H0:没有循环 CO2 排放(即不超过随机)。 H1:有一种循环或
我以前在这里寻求帮助的经历很丰富,我希望能再次获得帮助。 我正在估计一个相当大的混合效应模型,其中一个随机效应具有超过 150 个不同的级别。这将使标准的毛毛虫图变得非常难以理解。 如果可能的话,我想
想要用字符串标签替换我的数据框的某些数字列中的 NA -“不重要”。我尝试了以下方法,但出现错误 library(dplyr) library(tidyr) df_inu % mutate_a
情况1: 在主页上: script(src="angular.js") script(src="ember.js") script(src="react.js") script(src="knocko
想要用字符串标签替换我的数据框的某些数字列中的 NA -“不重要”。我尝试了以下方法,但出现错误 library(dplyr) library(tidyr) df_inu % mutate_a
更新 好的,经过一番调查,这在很大程度上要感谢乔恩和汉斯提供的有用答案,这就是我能够整理出来的内容。到目前为止,我认为它似乎运作良好。当然,我不会用我的生命去赌它的完全正确性。 public stat
我正在创建一个 Pandas DataFrame,其中一列是一年中每隔半小时的温度。 I want to create a column which on each row contains the
关于 Activity 的官方文档列出了 7 种生命周期方法。 onPostResume() 没有被引用为生命周期方法。 但是我觉得这个方法很重要。 在生命周期中,当一个activity从隐藏到显示状
问:数组键中的冒号:有什么特殊意义吗? 来自手册: 数组可以通过array() 语言构造来创建。它将任意数量的逗号分隔键 => 值对作为参数。 array( key => value ,
这个问题在这里已经有了答案: Difference between int[] array and int array[] (26 个答案) 关闭 8 年前。 String S[] = new St
为冗长的介绍道歉 - 只是试图适本地设置场景以避免歧义和困惑。 Web 应用程序已经从用于服务器端逻辑的基于浏览器的笨接口(interface)发展为完全基于浏览器的应用程序,对服务器端逻辑的需求最少
在 C 中,给定两个单精度或 double 浮点数,是否有一种简单的方法来确定它们有多少有效数字“匹配”? IE。如果我有两个十进制表示的这样的数字 1.64298272和 1.64298296我想得
在使用不同的排序算法时,我很惊讶 Groovy 闭包的表现非常糟糕。到目前为止,我找不到一个好的答案,所以现在在这里碰碰运气;) 为什么 Groovy 闭包比传统方法慢这么多? 这是一个显示性能差异的
我尝试使用 SKLearn 对相当大的数据集进行 LR,该数据集包含约 600 个虚拟变量和很少的区间变量(数据集中有 300 K 行),并且生成的混淆矩阵看起来很可疑。我想检查返回系数和方差分析的显
在对可扩展哈希进行编码时,可以选择使用哈希值的最高有效位或最低有效位来确定要哈希到哪个桶。使用最低有效位有许多优点: 当你加倍目录时,你可以只复制所有的指针,而不是必须创建一个新的目录来交错它们。 您
在发出管理命令 runserver 时,它会使用加载程序运行服务器。在Django1.5的源码中遇到了一段代码在启动新进程/线程中的服务器之前,它在环境变量中专门将 RUN_MAIN 的值设置为 't
似乎 Gremlin 控制台不适用于 Windows: 我下载了最新的 Gremlin 控制台并运行 bin\gremlin.bat 文件。似乎在连接(如下面的命令)并运行一个简单的远程命令(g.V(
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: At least the first 31 ,or 63 characters of an internal nam
我是一名优秀的程序员,十分优秀!