前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pandas常用操作

Pandas常用操作

作者头像
python数据可视化之路
发布2023-02-23 21:07:59
1.4K0
发布2023-02-23 21:07:59
举报

上一年由于备战考研,最近论文答辩结束,计划重启公众号。本篇文章主要是记录总结毕业论文中使用Pandas模块的常用操作,感兴趣的可以作为参考。


一、多个Excel合并成1个Excel

图1 6年气象站点文件

图2 气象站点内容概要

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

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

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

输出结果:

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

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

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

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

二、按照条件删除若干行

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

代码语言:javascript
复制
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) #输出删除后的数据形状

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

代码语言:javascript
复制
(148940, 14) 
(145291, 14)

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

代码语言:javascript
复制
df.drop(columns = ['time', 'pm2_5'], inplace = True)

三、添加新列

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

代码语言:javascript
复制
new_id = [i for i in range(5)]
new_id = pd.Series(new_id)
df['new_id'] = new_id
print(df)

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

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

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python数据可视化之美 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档