前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用Python进行MR栅格数据处理

利用Python进行MR栅格数据处理

作者头像
披头
发布2020-07-22 15:31:57
9680
发布2020-07-22 15:31:57
举报
文章被收录于专栏:datartisandatartisan

昨天用sql处理了MR栅格数据,今天研究下python如何实现

合并原始文件

合并多个原始csv文件可以参考这篇文章 利用Python批量合并csv

这里直接给出代码

代码语言:javascript
复制
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

代码语言:javascript
复制
df2 = pd.DataFrame(columns=['栅格中心经纬度标记', 'RSRP覆盖率','栅格总采样点数']) 

合并列

代码语言:javascript
复制
df2['栅格中心经纬度标记'] = df.iloc[:,0] + '_' + df.iloc[:,1]

转换列

df 中RSRP<=-110占比字段为 str ,需要先转换为 float 再除以100,最后用1-该值得到RSRP覆盖率

代码语言:javascript
复制
df2['RSRP覆盖率'] = 1 - df['RSRP<=-110占比'].str.strip("%").astype(float)/100

拆分列

代码语言:javascript
复制
# 栅格内主服务小区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

合并拆分好的列

代码语言:javascript
复制
df_split = pd.concat([pd.concat([cgilist, good_mrs],axis=1, join="inner"),mrs],axis=1, join="inner")

调整拆分列的顺序

代码语言:javascript
复制
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]

拼接所有列

代码语言:javascript
复制
mr_data = pd.concat([df2, df_split],axis=1, join="inner")

至此即可得到最终结果

写入文件至父级目录

代码语言:javascript
复制
mr_data.to_csv(path +r'\..\csv_merge.csv', index=None, encoding='gbk')
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐享数据8090 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 合并原始文件
  • pandas列转换
    • 合并列
      • 转换列
        • 拆分列
          • 合并拆分好的列
            • 调整拆分列的顺序
              • 拼接所有列
              相关产品与服务
              文件存储
              文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档