使用python导出大型数据集(从json到dataframe再到excel)
在从55488个json文件中提取信息后,我目前正在处理一个大数据集。我的问题是,我需要将其导出到excel文件,以便与其他没有编码经验、依赖此类文件来可视化和分析数据的用户共享 这是我管理数据的方式:使用python导出大型数据集(从json到dataframe再到excel),python,excel,pandas,Python,Excel,Pandas,在从55488个json文件中提取信息后,我目前正在处理一个大数据集。我的问题是,我需要将其导出到excel文件,以便与其他没有编码经验、依赖此类文件来可视化和分析数据的用户共享 这是我管理数据的方式: import json import pandas as pd import os import time import numpy as np start_time = time.time() d = {'a':[],'b':[],'c':[],'d':[],'e':[],'f':[],'
import json
import pandas as pd
import os
import time
import numpy as np
start_time = time.time()
d = {'a':[],'b':[],'c':[],'d':[],'e':[],'f':[],'g':[],'h':[]}
for files in os.listdir('C:\\Users\\name.of.user\\Documents\\jsons'):
x = 'C:\\Users\\name.of.user\\Documents\\jsons\\'+files
with open(x, encoding="Latin-1") as w:
data = json.load(w)
for i in range(1,len(data['variables']['arr'])):
d['a'].append(data['variables']['arr'][i]['a'])
d['b'].append(data['variables']['arr'][i]['b'])
d['c'].append(data['variables']['arr'][i]['c'])
d['d'].append(data['variables']['arr'][i]['d'])
d['e'].append(data['variables']['arr'][i]['e'])
d['f'].append(data['variables']['arr'][i]['f'])
d['g'].append(data['variables']['arr'][i]['g'])
d['h'].append(data['h'])
df = pd.DataFrame(d)
执行print(df.info())
后,我得到以下输出:
RangeIndex: 21829989 entries, 0 to 21829988
Data columns (total 8 columns):
a object
b float64
c object
d int64
e int64
f int64
g int64
h object
dtypes: float64(1), int64(4), object(3)
memory usage: 1.3+ GB
总执行时间为261.85秒
我准备使用此数据帧执行一些基本操作:
df1 = pd.pivot_table(df,index =['a','g','f'],columns='e',values='b',aggfunc=np.sum)
df2 = pd.pivot_table(df,index =['a','g','f'],columns='e',values='d',aggfunc=np.mean)
而print(df1.info())
给了我这个输出(同样的值适用于df2):
这有什么问题吗,或者我正试图导出的数据帧有什么问题吗?是否有任何方法可以优化并加快此过程?我感谢任何帮助,并将编辑与任何额外的信息,如果它被要求。谢谢。对于大数据也有同样的问题 这是我的解决办法 首先进行pip安装,以获得具有以下功能的xlsxwriter引擎:
pip install xlsxwriter
然后您只需将writer对象添加到dataframe.to_excel函数中,如下所示
writer = pd.ExcelWriter(full_file_name, engine='xlsxwriter')
df.to_excel(writer)
writer.save()
附言
压缩此数据的一种简单方法是将其构造为列表列表,其中列表0用作列,其余部分用作数据
我已经设法写了很大的xlsx文件(500k行x30列avrg)非常快
它仍然是json格式。(我在webArchive API中见过这种结构)
您可以创建如下数据帧:
df = pd.concat([pd.DataFrame([data], columns=[clnm for clnm in data_to_write[0]]) for data in data_to_write[1:]], ignore_index=True)
但在创建数据帧之前,您需要这样构造数据:
data = [['column1','column2'],
['data_row1','data_row1'],
['data_row1','data_row1'],
]
谢谢我会让我执行的代码继续运行,明天早上第一件事就是检查你的答案!
df = pd.concat([pd.DataFrame([data], columns=[clnm for clnm in data_to_write[0]]) for data in data_to_write[1:]], ignore_index=True)
data = [['column1','column2'],
['data_row1','data_row1'],
['data_row1','data_row1'],
]