面板数据转截面数据、截面数据转面板数据、合并多个面板数据
最近找数据整理用excel一直重复操作给恶心吐了,主要重复三种操作,多个面板的合并汇总,面板转横截面数据、截面数据转面板数据。所以自己写了代码解放双手,秒出结果,直接复制文件地址即可实现!
合并面板数据
def merge_panel(file_path,file_finish):file_name_list = os.listdir(file_path)file_list = []for i in file_name_list:a = file_path + '\\' + ifile_list.append(a)# print(a)data1 = pd.DataFrame(columns=['临时'])for file in file_list:data = pd.read_excel(file, sheet_name=0)names_list = data.columns.tolist()# print(names_list)# data.reindex(columns=names_list)data['临时'] = data[names_list[0]].astype(str) + data[names_list[1]].str[:2].astype(str)names_list.insert(names_list.index(names_list[2]), '临时')# print(names_list)data = data.reindex(columns=names_list)data = data.set_index([names_list[0], names_list[1]])data1 = data1.merge(data, how='outer', on='临时')# print(data1)# print(data1)# print(data[names_list[1]].str[:2])# print(data)data1["time"] = data1["临时"].str.extract('(\d+)')# print(df)data1["place"] = data1["临时"].str.extract('(\D+)', expand=False).str.strip()names_list1 = data1.columns.tolist()# print(names_list1)names_list1.insert(names_list1.index(names_list1[1]), 'time')# print(names_list1)names_list1.insert(names_list1.index('time') + 1, "place")data1 = data1.reindex(columns=names_list1[:-2])data1 = data1.drop(['临时'], axis=1)# data1 = data1.set_index(0)# print(names_list1[:-2])# print(data1.columns.tolist())names_list2 = data1.columns.valuesdata1 = data1.set_index(names_list2[1])data1.to_excel(file_finish)
截面数据转面板数据
def to_panel(file,file_finish):data = pd.read_excel(file, sheet_name=0)name = data.columns.valuesdata = data.melt(id_vars=name[0], value_vars=name[1:]).set_index(name[0])# data.to_excel(file_finish)data["time"] = data["variable"].str.extract('(\d+)')# print(df)data["variable"] = data["variable"].str.extract('(\D+)', expand=False).str.strip()data = data.loc[:, ['time', 'variable', 'value']]data = data.pivot_table(index=[name[0], 'time'], columns=["variable"]).reset_index().set_index(name[0])# print(data.columns.values)name12 = data.columns.values[:1]name_list1 = []for i in name12:name_list1.append(i[0])names = data.columns.values[1:]name_list = []for i in names:name_list.append(i[1])name_sum = name_list1 + name_list# print(name_sum)data.set_axis(name_sum, axis='columns', inplace=True)# data.drop(data.index[0:3], inplace=True)data = data.reset_index()data = data.set_index('time')data.to_excel(file_finish)
面板数据转截面数据
def reshape_wide(file,file_finish):data = pd.read_excel(file, sheet_name=0)# 获取列名list_name = data.columns.values# 读取省份(城市)city_list = list(set(data[list_name[0]]))data_Section = pd.DataFrame()city_list.sort()data_Section[list_name[0]] = city_list# 读取年份year_list = list(set(data[list_name[1]]))year_list.sort()# 截面变量for para in list_name[2:]:for year in year_list:para_name = str(year) + paradata_Section[para_name] = ""# 读取行值for index, row in data.iterrows():# 城市row_city = row[0]# 年份row_year = row[1]# 变量row_para = row[2:]paras_name = list_name[2:]# 将两列表合成元组hecheng = list(zip(row_para, str(row_year) + paras_name))# print(hecheng)city_weizhi_hang = data_Section[(data_Section[list_name[0]] == row_city)].index.tolist()for num, paraname in hecheng:data_Section.loc[city_weizhi_hang, paraname] = numdata_Section = data_Section.set_index(list_name[0])data_Section.to_excel(file_finish)
全部代码
import pandas as pd
import numpy as np
import os# 消去空值
def read_excel(file,file_finish):data = pd.read_excel(file, sheet_name=0)print(data)data = data.dropna()data.to_excel(r"C:\Users\ZhangX\Desktop\stata.xlsx")# 面板数据转截面数据
def reshape_wide(file,file_finish):data = pd.read_excel(file, sheet_name=0)# 获取列名list_name = data.columns.values# 读取省份(城市)city_list = list(set(data[list_name[0]]))data_Section = pd.DataFrame()city_list.sort()data_Section[list_name[0]] = city_list# 读取年份year_list = list(set(data[list_name[1]]))year_list.sort()# 截面变量for para in list_name[2:]:for year in year_list:para_name = str(year) + paradata_Section[para_name] = ""# 读取行值for index, row in data.iterrows():# 城市row_city = row[0]# 年份row_year = row[1]# 变量row_para = row[2:]paras_name = list_name[2:]# 将两列表合成元组hecheng = list(zip(row_para, str(row_year) + paras_name))# print(hecheng)city_weizhi_hang = data_Section[(data_Section[list_name[0]] == row_city)].index.tolist()for num, paraname in hecheng:data_Section.loc[city_weizhi_hang, paraname] = numdata_Section = data_Section.set_index(list_name[0])data_Section.to_excel(file_finish)# 截面数据转面板数据
def to_panel(file,file_finish):data = pd.read_excel(file, sheet_name=0)name = data.columns.valuesdata = data.melt(id_vars=name[0], value_vars=name[1:]).set_index(name[0])# data.to_excel(file_finish)data["time"] = data["variable"].str.extract('(\d+)')# print(df)data["variable"] = data["variable"].str.extract('(\D+)', expand=False).str.strip()data = data.loc[:, ['time', 'variable', 'value']]data = data.pivot_table(index=[name[0], 'time'], columns=["variable"]).reset_index().set_index(name[0])# print(data.columns.values)name12 = data.columns.values[:1]name_list1 = []for i in name12:name_list1.append(i[0])names = data.columns.values[1:]name_list = []for i in names:name_list.append(i[1])name_sum = name_list1 + name_list# print(name_sum)data.set_axis(name_sum, axis='columns', inplace=True)# data.drop(data.index[0:3], inplace=True)data = data.reset_index()data = data.set_index('time')data.to_excel(file_finish)# 合并面板数据
def merge_panel(file_path,file_finish):file_name_list = os.listdir(file_path)file_list = []for i in file_name_list:a = file_path + '\\' + ifile_list.append(a)# print(a)data1 = pd.DataFrame(columns=['临时'])for file in file_list:data = pd.read_excel(file, sheet_name=0)names_list = data.columns.tolist()# print(names_list)# data.reindex(columns=names_list)data['临时'] = data[names_list[0]].astype(str) + data[names_list[1]].str[:2].astype(str)names_list.insert(names_list.index(names_list[2]), '临时')# print(names_list)data = data.reindex(columns=names_list)data = data.set_index([names_list[0], names_list[1]])data1 = data1.merge(data, how='outer', on='临时')# print(data1)# print(data1)# print(data[names_list[1]].str[:2])# print(data)data1["time"] = data1["临时"].str.extract('(\d+)')# print(df)data1["place"] = data1["临时"].str.extract('(\D+)', expand=False).str.strip()names_list1 = data1.columns.tolist()# print(names_list1)names_list1.insert(names_list1.index(names_list1[1]), 'time')# print(names_list1)names_list1.insert(names_list1.index('time') + 1, "place")data1 = data1.reindex(columns=names_list1[:-2])data1 = data1.drop(['临时'], axis=1)# data1 = data1.set_index(0)# print(names_list1[:-2])# print(data1.columns.tolist())names_list2 = data1.columns.valuesdata1 = data1.set_index(names_list2[1])data1.to_excel(file_finish)# ****面板数据合并格式********** #
# 年份 省份 变量1 变量2 ...
# 2003 重庆 123 1234
# ... ... ...
# **********************## ****面板数据转截面数格式****** #
# 省份 年份 变量1 变量2 ...
# 重庆 2003 123 1234
# ... ... ... ...
# ************************** ## 读取需要转换的文件路径# 合并面板数据数据指定文件夹路径即可
file_read = r"C:\Users\ZhangX\Desktop\999测试"
# 文件保存路径
file_finish = r"C:\Users\ZhangX\Desktop\999测试\汇总.xlsx"if __name__ == '__main__':merge_panel(file_read,file_finish)# to_panel(file_read)# reshape_wide(file_read)
面板数据转截面数据、截面数据转面板数据、合并多个面板数据相关推荐
- 省级面板数据(2000-2019)十八:物质资本(原始数据、测算数据)(stata版本)
省级面板数据(2000-2019)十八:物质资本(原始数据.测算数据)(stata版本) 数据来源:中国统计年鉴+EPS数据平台+各省统计年鉴 作者收集整理所得!!! 下载链接:https://bbs ...
- pandas plot label_数据科学| 手把手教你用 pandas 索引、汇总、处理缺失数据
作者:Paul 编者按: pandas提供了很多常用的数学和统计方法,本文中将用十分详细的例子来具体进行介绍:另外在许多数据分析工作中,缺失数据是经常发生的,将会具体介绍如何处理缺失数据.本文十分详细 ...
- 字段缺失_数据科学| 手把手教你用 pandas 索引、汇总、处理缺失数据
作者:Paul 编者按: pandas提供了很多常用的数学和统计方法,本文中将用十分详细的例子来具体进行介绍:另外在许多数据分析工作中,缺失数据是经常发生的,将会具体介绍如何处理缺失数据.本文十分详细 ...
- 2021年大数据Kafka(十一):❤️Kafka的消费者负载均衡机制和数据积压问题❤️
全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Kafka的消费者负载均衡机制和数据积压问题 一.kafka ...
- 某天没有数据能查出来0数量_用Excel对纽约市出租车费数据探索性分析
一.引言 背景:在纽约,游客们往往把自由女神象.帝国大厦.中央公园等视为纽约的象征, 但穿梭在人海中的出租车也是纽约靓丽的人文景观之一, 是其流动的风景线, 在纽约公共文化中别具魅力.本篇文章利用之前 ...
- 数据治理展示血缘关系的工具_Nebula Graph 在微众银行数据治理业务的实践
本文为微众银行大数据平台:周可在 nMeetup 深圳场的演讲这里文字稿,演讲视频参见:B站 自我介绍下,我是微众银行大数据平台的工程师:周可,今天给大家分享一下 Nebula Graph 在微众银行 ...
- oracle 统计一年中每个月数据总和_excel表格有每月数据 怎样统计全年的-用excel公式怎样计算每年每个月的数据总和?...
excel表格中如何统计1月到12月的数据 我用的是Excel07版为你的表已经是存在的,并能力有限,所只能给你说下面这一种方法了,用着也单的!下边我做一个示范: 第一步 在Excel表格右侧空白任意 ...
- pandas索引复合索引dataframe数据、索引其中多个水平(level)的多个数据行(index rows from different levels)、使用元组tuple表达复合索引的指定行
pandas索引复合索引dataframe数据.索引其中多个水平(level)的多个数据行(index rows from different levels and combine).使用元组tupl ...
- pandas使用query函数查询dataframe指定数据列的内容(数值)包含在特定列表中的数据行(select rows which column values contain in list)
pandas使用query函数查询dataframe指定数据列的内容(数值)包含在特定列表中的数据行(select rows which column values contained in a li ...
最新文章
- 实体链接:信息抽取中的NLP的基础任务
- 智能&大数据时代,架构师思维的十个学习步骤(优化版)
- DNS服务搭建和正反区域解析
- Mongoose快速入门
- 中国石油大学计算机专业调剂信息,2014年中国石油大学(北京)计算机专业考研调剂信息(新)...
- python 文本相似度_【机器学习】使用gensim 的 doc2vec 实现文本相似度检测
- openGL es实现小实例
- javaWeb校园宿舍管理解析(二)
- 切换计算机用户指,切换用户提示计算机锁定
- java寻宝题目,神都夜行录寻宝答题答案大全 挖宝答题答案汇总
- 百练2706 麦森数
- 梁建章:我的鼠标 水泥《前程密码》
- 各个级别的教师资格证分别可以教什么阶段
- 【linux】将Linux里的文件上传 到gitee仓库
- 一款免杀远控,马子体积小
- 用Python实现地理探测器
- Beautiful Soup模块详解
- Adobe CS3安装程序在2003和XP SP1下无法安装的解决办法
- 图扑软件数字孪生 3D 风电场,智慧风电之海上风电
- mozilla 源码_每日新闻摘要:Mozilla的Firefox Premium计划