Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python导出大型数据集(从json到dataframe再到excel)_Python_Excel_Pandas - Fatal编程技术网

使用python导出大型数据集(从json到dataframe再到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':[],'

在从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':[],'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'],
       ]