利用Python进行MR栅格数据处理
时间:2022-07-22
本文章向大家介绍利用Python进行MR栅格数据处理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
昨天用sql处理了MR栅格数据,今天研究下python如何实现
合并原始文件
合并多个原始csv文件可以参考这篇文章 利用Python批量合并csv
这里直接给出代码
import pandas as pd
import os
path = input('请输入文件夹路径: ')
files = os.listdir(path)
csv_list = []
for f in files:
if os.path.splitext(f)[1] == '.csv':
csv_list.append(path + '\' + f)
else:
pass
df = pd.read_csv(csv_list[0], low_memory=False, encoding='gbk', dtype = {'中心经度' : str, '中心纬度' : str})
for i in range(1, len(csv_list)):
df_i = pd.read_csv(csv_list[i], low_memory=False, encoding='gbk', dtype = {'中心经度' : str, '中心纬度' : str})
pieces = [df[:], df_i[:]]
df = pd.concat(pieces).drop_duplicates()
df = df.iloc[:, [0,1,9,13,14,32,41]] #想保留的列的编号。0为起点
pandas列转换
先定义空的dataframe
df2 = pd.DataFrame(columns=['栅格中心经纬度标记', 'RSRP覆盖率','栅格总采样点数'])
合并列
df2['栅格中心经纬度标记'] = df.iloc[:,0] + '_' + df.iloc[:,1]
转换列
df 中RSRP<=-110占比
字段为 str ,需要先转换为 float 再除以100,最后用1-该值
得到RSRP覆盖率
df2['RSRP覆盖率'] = 1 - df['RSRP<=-110占比'].str.strip("%").astype(float)/100
拆分列
# 栅格内主服务小区CGI
cgilist = df.iloc[:,2].str.split(';',expand=True).iloc[:,0:15]
cgilist = cgilist.reindex(columns=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])
vec1 = ['小区'+str(i)+'ECGI' for i in range(1,16)]
cgilist.columns = vec1
# 栅格内主服务小区采样点数量
mrs = df.iloc[:,3].str.split(';',expand=True).iloc[:,0:15]
mrs = mrs.reindex(columns=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])
vec2 = ['小区'+str(i)+'采样点数量' for i in range(1,16)]
mrs.columns = vec2
# 栅格内主服务小区弱覆盖采样点数量
bad_mrs = df.iloc[:,4].str.split(';',expand=True).iloc[:,0:15]
bad_mrs = bad_mrs.reindex(columns=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])
vec3 = ['小区'+str(i)+'弱覆盖采样点数量' for i in range(1,16)]
bad_mrs.columns = vec3
# 栅格内主服务小区采样点(>-110)数量
good_mrs = df.iloc[:,3].str.split(';',expand=True).iloc[:,0:15].astype('int') - df.iloc[:,4].str.split(';',expand=True).iloc[:,0:15].astype('int')
good_mrs = good_mrs.reindex(columns=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])
vec4 = ['小区'+str(i)+'采样点(>-110)数量' for i in range(1,16)]
good_mrs.columns = vec4
合并拆分好的列
df_split = pd.concat([pd.concat([cgilist, good_mrs],axis=1, join="inner"),mrs],axis=1, join="inner")
调整拆分列的顺序
vec=[['小区'+str(i)+'ECGI', '小区'+str(i)+'采样点(>-110)数量', '小区'+str(i)+'采样点数量'] for i in range(1,16)]
columnsname=[]
[columnsname.extend(vecx) for vecx in vec]
df_split = df_split[columnsname]
拼接所有列
mr_data = pd.concat([df2, df_split],axis=1, join="inner")
至此即可得到最终结果
写入文件至父级目录
mr_data.to_csv(path +r'..csv_merge.csv', index=None, encoding='gbk')
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一起刷Leetcode第一篇,数组和字典的妙用
- 加速Python列表和字典,让你代码更加高效
- 如何使用Python的Flask和谷歌app Engine来构建一个web app
- 如何用Python实现电子邮件的自动化
- 在Win下安装Visual Studio和Parallel Studio XE
- 我们将项目语言从Python转向Go的5个原因
- GFN-xTB的编译与API使用
- 红外光谱的理论计算
- 一起刷题(leetcode)第二篇:如何用Python实现递归
- 如何成为Python的数据操作库Pandas的专家?
- 谈谈Gaussian软件中的guess=mix
- 用ORCA做DLPNO-CCSD(T)计算
- Fortran调用C函数
- 在Python中创建命令行界面的最佳方式
- Diels-Alder反应的区域选择性分析