gpt4 book ai didi

python - 使用 python 导出大型数据集(从 json 到 dataframe 再到 excel)

转载 作者:太空宇宙 更新时间:2023-11-04 01:52:54 28 4
gpt4 key购买 nike

在从 55,488 个 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 的值相同):

<class 'pandas.core.frame.DataFrame'>
MultiIndex: 258522 entries, (14650100911701062260, 2018, 7) to (ES9830350285992850013669, 2019, 6)
Data columns (total 31 columns):
1 235167 non-null float64
2 234870 non-null float64
3 234719 non-null float64
4 234233 non-null float64
5 234213 non-null float64
6 233860 non-null float64
7 233617 non-null float64
8 233623 non-null float64
9 233427 non-null float64
10 233495 non-null float64
11 233430 non-null float64
12 233391 non-null float64
13 233265 non-null float64
14 233024 non-null float64
15 233015 non-null float64
16 232933 non-null float64
17 233012 non-null float64
18 232719 non-null float64
19 232858 non-null float64
20 233008 non-null float64
21 232997 non-null float64
22 233109 non-null float64
23 233046 non-null float64
24 233151 non-null float64
25 233347 non-null float64
26 233760 non-null float64
27 233841 non-null float64
28 234016 non-null float64
29 213162 non-null float64
30 213435 non-null float64
31 136948 non-null float64
dtypes: float64(31)
memory usage: 62.3+ MB

总处理时间为 298.68 秒。

最后,当我尝试使用 pandas to_excel() 函数将两个数据帧导出到一个 .xlsx 文件(每个数据帧到一个独立的 excel 文件)时,似乎出了点问题,因为已经两个小时了甚至没有成功创建一个 excel 文件:

df1.to_excel('d_a.xlsx')
df2.to_excel('d_b.xlsx')

这或我尝试导出的数据帧有问题吗?有什么方法可以优化并使这个过程更快?感谢任何帮助,如果需要,我将编辑任何额外信息。谢谢。

最佳答案

大数据也有同样的问题。

这是我的解决方案。

首先执行 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 文件(平均 50 万行 x 30 列)。

还是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'],
]

关于python - 使用 python 导出大型数据集(从 json 到 dataframe 再到 excel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581314/

28 4 0
文章推荐: python - 将参数传递给 Python 脚本
文章推荐: html - 是否可以将背景图像添加到 JSP 页面上的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com