一行代码优化:将嵌套JSON转为 pandas DataFrame

需积分: 5 1 下载量 117 浏览量 更新于2024-08-05 收藏 686B TXT 举报
在提供的Python脚本中,核心功能是将JSON数据转换为Pandas DataFrame。原代码中使用`pd.DataFrame.from_dict(dc['data'])`来处理嵌套的JSON数据,但为了优化并减少冗余列(即扁平化多层嵌套结构),引入了`pd.json_normalize()`函数。`json_normalize`是Pandas提供的一种实用工具,它能根据指定的键路径或列名将嵌套的JSON数据结构展开,使得数据更容易进行分析和操作。 在`json_to_table_nested`函数中,首先打开指定的JSON文件,如`F:\AA\API-BotStatus-複製.txt`,并使用`json.load()`方法读取其中的数据,存储在变量`dc`中。然后,通过将`dc['data']`作为参数传递给`pd.json_normalize()`,这行关键代码实现了对嵌套数据的规范化处理。这个操作会生成一个DataFrame,其中的数据结构更简洁,减少了因为原始JSON的多层嵌套导致的列重复。 原始代码可能需要处理的数据结构类似于: ```json { "data": { "key1": [ {"sub_key1": "value1", "sub_key2": "value2"}, {"sub_key1": "value3", "sub_key2": "value4"} ], "key2": {...}, ... } } ``` 经过`pd.json_normalize()`处理后,结果DataFrame可能类似这样: ``` sub_key1 sub_key2 0 value1 value2 1 value3 value4 ``` 这样做的好处在于,每个子键及其对应的值都被转换成了DataFrame中的单独列,便于后续的数据清洗、分析和可视化。最后,将处理后的DataFrame保存为Excel文件(`.xlsx`格式),方便其他用户查看和使用。 这段脚本的核心改进在于利用`pd.json_normalize()`函数简化了数据结构,提高了数据处理的效率,并减少了数据存储时的复杂度。在实际工作中,这样的处理方式对于有效管理和分析大量JSON数据尤其重要。

# 导入数据集 def import_csv_data(): global file_path, df, txt_data file_path = filedialog.askopenfilename() df = pd.read_csv(file_path) df = df.fillna(0) top_5 = df.head() txt_data.delete('1.0', tk.END) txt_data.insert(tk.END, top_5) # 处理缺失值 def handle_missing_values(): global file_path # 读取CSV文件 data = pd.read_csv(file_path) # 处理缺失值 data.fillna(0, inplace=True) # 显示前10行数据 text_output.insert(tk.END, "处理缺失值成功,前10行数据如下:\n") text_output.insert(tk.END, str(data.head(10))) # 标准化数值型数据 def normalize_numeric_data(): global file_path # 读取CSV文件 data = pd.read_csv(file_path) # 提取数值型数据 numeric_data = data.select_dtypes(include=['float64', 'int64']) # 标准化数据 scaler = StandardScaler() normalized_data = scaler.fit_transform(numeric_data) # 将处理后的数据写回原数据框 data.loc[:, numeric_data.columns] = normalized_data # 显示前10行数据 text_output.insert(tk.END, "标准化数值型数据成功,前10行数据如下:\n") text_output.insert(tk.END, str(data.head(10))) # 划分训练集和测试集 def split_train_test(): global file_path, train_ratio # 读取CSV文件 data = pd.read_csv(file_path) # 划分数据集 train, test = train_test_split(data, train_size=train_ratio) # 显示训练集和测试集大小 text_output.insert(tk.END, "训练集大小:{}\n".format(len(train))) text_output.insert(tk.END, "测试集大小:{}\n".format(len(test)))续写代码实现“模型下拉菜单,可选择相应模型,选择后,对相应模型进行训练,测试”的功能

2023-05-31 上传

import pandas as pd import tkinter as tk from tkinter import filedialog from sklearn.preprocessing import StandardScaler # 定义全局变量 file_path = "" def import_csv_data(): global file_path file_path = filedialog.askopenfilename() # 读取CSV文件并显示在Text控件上 data = pd.read_csv(file_path) # 获取前5行数据 top_5 = data.head() # 将前5行数据插入到Text控件 txt_data.insert(tk.END, top_5) # 处理缺失值 def handle_missing_values(): global file_path # 修改2:使用全局变量 # 读取CSV文件 data = pd.read_csv(file_path) # 处理缺失值 data.fillna(0, inplace=True) # 显示前10行数据 text_output.insert(tk.END, "处理缺失值成功,前10行数据如下:\n") text_output.insert(tk.END, str(data.head(10))) # 标准化数值型数据 def normalize_numeric_data(): global file_path # 读取CSV文件 data = pd.read_csv(file_path) # 提取数值型数据 numeric_data = data.select_dtypes(include=['float64', 'int64']) # 标准化数据 scaler = StandardScaler() normalized_data = scaler.fit_transform(numeric_data) # 将处理后的数据写回原数据框 data.loc[:, numeric_data.columns] = normalized_data # 显示前10行数据 text_output.insert(tk.END, "标准化数值型数据成功,前10行数据如下:\n") text_output.insert(tk.END, str(data.head(10))) 这段代码后的def encode_categorical_data(): # 读取CSV文件 data = pd.read_csv("file.csv") # 提取类别型数据 categorical_data = data.select_dtypes(include=['object']) # 编码数据 encoder = LabelEncoder() encoded_data = categorical_data.apply(encoder.fit_transform) # 将处理后的数据写回原数据框 data.loc[:, categorical_data.columns] = encoded_data # 显示前10行数据 text_output.insert(tk.END, "编码类别型数据成功,前10行数据如下:\n") text_output.insert(tk.END, str(data.head(10)))这段代码怎么改能跑通

2023-05-28 上传