当前位置:   article > 正文

Pandas常用操作,多个Excel合并成1个Excel_pandas合并多个excel

pandas合并多个excel

一、多个Excel合并成1个Excel

▲图1:6年气象站点文件

▲图2:气象站点内容概要

如图,需要将6年的气象站点数据重新整理到一个Excel中。其中每个文件的内容如图2,要求合并时去除第一列,第二列这两个无用列。步骤代码如下:

1.构建文件列表和要读取的文件列名称

import os
import pandas as pd
file_dir = r'D:\公众号\Pandas基本操作'
#设置工作空间,默认读取的就是这个文件夹下的文件
#输出文件时,也是默认输出到本路径下
os.chdir(file_dir)

file_ls = os.listdir(file_dir)  #设置文件列表
print(file_ls)

df = pd.read_csv(file_ls[0]) #读取文件列表第一个文件的全部数据
use_cols = df.columns[2:] #获取要读取的列名,因为有两列是无用列
print(use_cols)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

输出结果:

['2015站点匹配.csv','2016站点匹配.csv','2017站点匹配.csv','2018站点匹配.csv','2019站点匹配.csv','2020站点匹配.csv']
Index(['time', 'pm2_5', 'aod', 'blh', 'sp', 't2m', 'rh', 'ndvi', 'dem', 'luc',
       'ws', 'site', 'lon', 'lat'],
      dtype='object')
  • 1
  • 2
  • 3
  • 4

2.迭代读取文件并拼接数据,输出数据至文件,代码如下:

df = pd.DataFrame(columns = use_cols) #构建一个空的DataFrame二维数组
for file in file_ls:
    son_df = pd.read_csv(file, usecols = use_cols) #读取指定列的数据
    #将两个DataFrame进行拼接,axis = 0表示在行方向拼接,ignore_index可以忽略两个DataFrame的索引
    df = pd.concat([df, son_df], axis = 0, ignore_index = True) 
df.to_excel(r'年份汇总.xlsx', index = False) #输出到文件,index参数可以忽略索引输出
print(df)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

结果如图所示,一共98万余条数据,输出时电脑已卡死

二、按照条件删除若干行

以2015年数据为例,列‘pm2_5’表示一年中各个站点的pm2.5数值。假定大于600或小于10为异常值,需要删除,代码如下:

import numpy as np
df = pd.read_csv(file_ls[0], usecols = use_cols)
print(df.shape) #获取删除前的数据形状
del_index = df[(df['pm2_5'] > 600) | (df['pm2_5'] < 10)].index #获取满足条件的行索引
df.drop(del_index, inplace = True) #删除满足条件的行,inplace表示在源数据上删除,故没有返回值
print(df.shape) #输出删除后的数据形状
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果如下,可以看出输出前为148940行,输出后为145291行:

(148940, 14)` `(145291, 14)
  • 1

同理,删除若干列需要用columns参数,这是因为drop默认删除行,如不加columns参数会找不到对应的行索引:

df.drop(columns = ['time', 'pm2_5'], inplace = True)
  • 1

三、添加新列

假设我们为2015年添加一列,列名为’new_id’,但是只添加5行,代码如下:

new_id = [i for i in range(5)]``new_id = pd.Series(new_id)``df['new_id'] = new_id``print(df)
  • 1

可以看出添加成功。pd.Series语法将列表转为Series格式,如果不转换,将会报错,提示行不匹配。

接下来将NaN值赋值为-1,有两个方法,代码如下:

df.loc[df[pd.isnull(df['new_id'])].index, 'new_id'] = -1  #方法1``   ``#方法2``new_col = df['new_id'].fillna('-1')``df['new_id'] = new_col
  • 1

方法一利用pd.isnull判断某一列中为NaN的行,利用.index得到行索引。再利用df.loc对满足条件的列赋值。

方法二利用.fillna对某一列的NaN赋值为-1,得到的为Series对象。再利用列赋值语句将原来的列覆盖。结果如下:

以上就是在以前常使用的操作,总结下来就是数据的读取、筛选、合并、输出等环节。感谢阅读!

如果你对Python感兴趣的话,可以试试我整理的这份Python全套学习资料,微信扫码免费领取

包括:Python永久使用安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等学习教程。带你从零基础系统性的学好Python!

零基础Python学习资源介绍

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python学习软件

工欲善其事,必先利其器。学习Python常用的开发软件都在这里了!
在这里插入图片描述

三、Python入门学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

四、Python练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

五、Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。这份资料也包含在内的哈~在这里插入图片描述

六、Python面试资料

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

七、资料领取

上述完整版Python全套学习资料已经上传CSDN官方,需要的小伙伴可自行微信扫描下方CSDN官方认证二维码免费领取!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/210012
推荐阅读
相关标签
  

闽ICP备14008679号