linux pandas教程_Pandas 学习笔记

  1. 安装

如果做数据分析用途建议使用Anaconda,自带pandas numy 以及很多库,还有集成开发环境Spyder(自带的变量查看器很好用) WIN LINUX MAC均支持。

安装之后可以在terminal 输入 conda 开头的命令(类似pip),例如list 查看已经安装的包,以及进行常用的install update等动作。

  1. Import

绝大部分时候pandas都被使用者import为pd,根据作者的描述其实pandas是panel data的缩写(而不是熊猫)

import pandas as pd

  1. DataFrame

DataFrame是Pandas用来处理数据最常见的格式,一张二维的表,有行,列和值。类似于一个数据库里的table 或者excel中的worksheet。如果有一个DataFrame叫df, df.columns可以得到所有的列标签,同理df.index可以得到所有的行标签。

  1. 读取数据

4.1 从excel中读取数据

raw = pd.read_excel(‘%s%s.xlsx’ %path %filename, sheetname=’Data’, skiprows= 1)

数据会被读取到一个叫raw的DataFrame中,sheetname可以指定读某个工作表,skiprow可以跳过初始N行的数据。

4.2 从csv中读取数据

raw = pd.read_csv(‘%s%s.csv’ %path %filename)

  1. 增删改查

5.1 增删列

新增列,位置在最后一列

raw[‘新列名’] = ‘string’

在中间增列,使用 df.insert()

df.insert(位置,’列名’,值)

例如,在raw df第二列(index不算一列)插入一列,名为city,值为source_data的 [city]列

raw.insert(1,’column_name’,source_data[‘data1’])

删除列

del raw[‘列名’]

5.2 改列名

5.2.1 一次性改变所有的列名

cols = [‘name_1’, ‘name_2’, ‘name_3’]

raw= raw[cols]

5.2.2 修改某个列名

使用df.rename(), 注意如果df中有多个old_name列的话都会被一并重命名为new_name

df=df.rename(columns = {‘old_name’:’new_name’})

5.3 改index

把某列设为index,原index会被删除

raw = raw.set_index(‘column_name’)

reset_index(),新index是以0开始的递增整数列,原index会变成一个新的列。

raw = raw.reset_index()

如果不需要原来的index中的值可以加drop = True:

raw = raw.reset_index(drop=True)

5.4 编辑值(计算值)

5.4.1 四则运算

raw[‘data1’] = raw[‘data1’] *100

raw[‘data2’] = (raw[‘data1’]+raw[‘data3’])/raw[‘data4’]

raw[‘total’] = raw.sum(axis=1)

5.5 查列

5.5.1 筛选某列包含某值(raw df中 GEO CODE为CN的所有数据)

raw = raw[raw[‘GEO_CODE’]==’CN’]

5.5.2 多条件筛选

raw = raw[(raw[‘GEO_CODE’]==’CN’)&(raw[‘METRIC’]==’Conversion Rate’)]

5.5.3 筛选多个列

required_key = [‘User_ID’,’SEO visits’,’SEA visits’,’Conversion Rate’]

raw = raw[raw[‘METRIC_KEY’].isin(required_key)]

5.6 去重

5.6.1 去重使用drop_duplicates(),主要有2个参数:

subset 需要去重的值

keep,在遇到重复值时保留第一个(keep = ‘first’)or最后一(keep = ‘last’)

df = df.drop_duplicates(subset = ‘column_name’, keep = ‘last’)

5.6.2 因为去重时,保留的值很简单是取第一个或最后一个,所以需要搭配sort_values()来保证留下的值是你想要的。sort_values()默认是升序ascending,由小到大。

df = df.sort_values(by=’column_name’)

df = df.drop_duplicates(subset = ‘column_name’, keep = ‘last’)

6 Excel功能相关

6.1 Excel的数据透视表

pd.pivot_table()

主要有3个参数,index, columns,value, 以及aggfunc

index相当于行标签

columns相当于列标签

value相当于用来计算值,配合aggfunc来计算count/mean/average

注意value不能使用index 和columns已经使用过的值,这点和excel不同。

pivot= pd.pivot_table(raw, values = ‘Response ID’, index= [‘Country’], columns=[‘NPS category’], aggfunc=np.size)

aggfunc目前用过的有计数np.size 汇总np.sum 平均np.average np.mean 中位数np.median

6.2 DataFrame的融合 (vlookup or hookup)

因为excel的公式是在某个单元格中,而DataFrame一般是一次性处理行或列的数据,给某行/列根据其他行/列的数据引用赋值就相当于表格的融合。

主要用到2个方法:

pd.merge()

pd.concat()

详情请看下节

6.3 pd.merge()

pd.merge()非常类似数据库中join的操作,参数很丰富:

merged_df = pd.merge(left, right, how=’inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=(‘_x’, ‘_y’), copy=True, indicator=False)

merge可以提供关系型数据库中常用的几种合并方式,空值会用NaN填充:

下面是几个常用参数的详解:

参数on

pd.merge(df1, df2, on = ‘xxx’) #on的参数用来确定2个表共同的column。

on在这里就相当于vlookup中lookup value的定位

参数merge

pd.merge(df1, df2, how= ‘xxx’) #how的参数用来确定 merge method 。

Merge method和SQL join的对应关系如下:

Merge method

SQL Join Name

Description

left

LEFT OUTER JOIN

只使用左表的键(key)

right

RIGHT OUTER JOIN

只使用右表的键

outer

FULL OUTER JOIN

使用两表的并集的键

iner

INNER JOIN

使用两表的交集的键

如果使用pd.merge实现vlookup时,正好二者的index就是共有值,只要

pd.merge(main_data,to_lookup_data,on =’left’)就OK了

参数left_on right_on

to bu input

参数left_index right_index

to bu input

6.4 pd.concat()

如果两个DataFrame column相同,二者上下拼接在一起 (增加数据行)

pd.concat([df1,df2])

如果两个DataFrame index相同,二者左右拼接在一起 (增加数据列)

pd.concat([df1,df2], axis = 1)

如果有多个DataFrame, column相同的情况下:

dfs = [df1,df2,df3,df4]

result = pd.concat(dfs)

  1. 数据输出

假设现在有一个名为raw的DataFrame需要输出到C盘根目录

7.1 输出到csv

DataFrame自带to_csv()功能,注意如果有中文建议加encoding参数,如果不需要index可加 index= False 参数。

raw.to_csv(‘C:\File_name.csv’, encoding = ‘utf-8’, index = False)

7.2 输出到Excel

使用pandas自带的 Excel Writer生成2010格式的excel,

from pandas import ExcelWriter

path = ‘C:\’

writer = ExcelWriter(‘%sFile_name.xlsx’ %path) #指定Excel文件名

raw.to_excel(writer, sheet_name = ‘worksheet_name’) #指定工作表名称

writer.save()

7.3 输出到数据库

如果要存数据库呢? RDBS和NOSQL

Mysql

MongoDB

To be input..

8.使用datetime进行时间相关的操作

python中用datetime也可以实现同excel中常用的日期函数一样的功能

8.1 创建现在的时间点为对象

import datetime

now = datetime.datetime.now()

today = datetime.datetime.today()

8.2 时间的位移

start_date = dt.date(today.year-2,today.month-1,today.day)

end_date = dt.date(today.year,today.month-3,today.day+1)

如果月份/日期 超过限制会报错

所以可能需要写一个循环去输出这些日期

date_list = []

while start_date < end_date:

if start_date.month < 12:

date_list.append(start_date.strftime(‘%Y-%m’))

start_date = datetime.date(start_date.year,start_date.month +1,start_date.day)

else:

date_list.append(start_date.strftime(‘%Y-%m’))

8.3 调整格式

%y 两位数的年份表示(00-99)

%Y 四位数的年份表示(000-9999)

%m 月份(01-12)

%d 月内中的一天(0-31)

%H 24小时制小时数(0-23)

%I 12小时制小时数(01-12)

%M 分钟数(00=59)

%S 秒(00-59)

%a 本地简化星期名称

%A 本地完整星期名称

%b 本地简化的月份名称

%B 本地完整的月份名称

%c 本地相应的日期表示和时间表示

%j 年内的一天(001-366)

%p 本地A.M.或P.M.的等价符

%U 一年中的星期数(00-53)星期天为星期的开始

%w 星期(0-6),星期天为星期的开始

%W 一年中的星期数(00-53)星期一为星期的开始

%x 本地相应的日期表示

%X 本地相应的时间表示

%Z 当前时区的名称

%% %号本身

8.4 周数的计算

8.5 工作日的计算

Excel中有个很方便的函数叫networkdays,给出起始日期,结束日期和holiday可以计算两个日期间的工作天数。而pandas或者datetime对这个需求支持的不好,所以找到了这个module: business_calendar

https://pypi.python.org/pypi/business_calendar/

8.5.1 计算日期之间的工作日数量

例如,求16年2月1日~29日的工作日有几天,已知条件:

周一到周五都上班

2月8日到12日为休假

date1 = datetime.datetime(2016,1,31)#注意如果写2月1日,当天是不包含在内的,所以写1月31日

date2 = datetime.datetime(2016,2,29)

cal = Calendar(workdays =[MO, TU, WE, TH, FR], holidays=[‘2016-02-08′,’2016-02-09′,’2016-02-10′,’2016-02-11′,’2016-02-12’])

bsday = cal.busdaycount(date1, date2)

print (bsday)

8.5.2 计算从某天开始,N个工作日之后的日期

残念的是,这个module并不支持所谓”调休”的概念。sigh

Original: https://blog.csdn.net/weixin_29201313/article/details/112951116
Author: L oiey
Title: linux pandas教程_Pandas 学习笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/755992/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python数据分析【第11天】| DataFrame转化格式并保存(to_excel(),to_json(),to_csv())

    系列文章目录 第1天:读入数据第2天:read()、readline()与readlines()第3天:进度条(tqdm模块)第4天:命令行传参(argparse模块)第5天:读、…

    Python 2023年8月6日
    073
  • 浅析拉格朗日乘数法及其对偶问题

    在数学最优问题中,拉格朗日乘数法(以数学家约瑟夫·路易斯·拉格朗日命名)是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法。这种方法将一个有n个变量与k个约束条件的最优化问…

    Python 2023年10月29日
    067
  • 李宏毅2021&2022机器学习

    (重磅须知,统一说明)为方便所有网课资料与优质电子书籍的实时更新维护, 创建了一个在线实时网盘文件夹;网盘获取方式: 公众号【 啥都会一点的研究生】,本节课对应序号【 05】; U…

    Python 2023年8月1日
    037
  • Odoo自建应用初步总结(一)

    学习了《Odoo快速入门与实践 Python开发ERP指南》(刘金亮 2019年5月第1版 机械工业出版社)第6章自建应用入门后进行一下总结。 因为本书作者使用Odoo11,而目前…

    Python 2023年6月9日
    056
  • 神经网络量化基础

    1,模型量化概述 1.1,模型量化优点 1.2,模型量化的方案 1.2.1,PTQ 理解 1.3,量化的分类 1.3.1,线性量化概述 2,量化算术 2.1,定点和浮点 2.2,量…

    Python 2023年10月29日
    061
  • iOS全埋点解决方案-采集崩溃

    🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位 进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 入…

    Python 2023年8月14日
    039
  • 卡尔曼滤波及其变种有哪些?究竟滤了个啥?

    点击下方 卡片,关注” 自动驾驶之心“公众号 ADAS巨卷干货,即可获取 点击进入→ 后台回复 【卡尔曼滤波】获取卡尔曼滤波学习相关资料! 1从基础卡尔曼滤…

    Python 2023年10月7日
    072
  • django+uwsgi+nginx部署

    django+uwsgi+nginx部署 安装nginx sudo apt-get install nginx即可。 ; 安装python解析器 python解析器可以直接在pyt…

    Python 2023年8月6日
    067
  • Python 偷偷爬取QQ音乐全部歌曲,这听起来就不错

    Original: https://www.cnblogs.com/123456feng/p/16137845.htmlAuthor: 蚂蚁ailingTitle: Python …

    Python 2023年11月3日
    047
  • python基础知识

    pycharm的简单配置 settings->editor->file and code temlates #-*- codeing = utf-8 -*- 编码 #@…

    Python 2023年5月24日
    073
  • DTFT和DFT有何区别?一文为你讲解清楚

    很多人在开始学习数字信号处理的时候,对于各种傅里叶变换特别是离散傅里叶变化的概念及作用完全不清楚,IC修真院在网上整理了关于DTFT、DFT的各知识点。下面就来了解一下关于DTFT…

    Python 2023年9月29日
    049
  • Hook原理

    对于会Hook的人来说,Hook其实也就那么回事.对于没有Hook过的人来说,会感觉Hook很高大上(其实也没毛病). 那么今天我们就来探讨一些Hook的原理是什么. 我认为任何H…

    Python 2023年9月28日
    051
  • Type Script 在流程设计器的落地实践

    流程设计器项目介绍 从事过BPM行业的大佬必然对流程建模工具非常熟悉,做为WFMC三大体系结构模型中的核心模块,它是工作流的能力模型,其他模块都围绕工作流定义来构建。 成熟的建模工…

    Python 2023年10月13日
    057
  • redis使用教程

    redis教程: ​ &#x200B;redis&#x200B;​是一种​ &#x200B;nosql&#x200B;​数据库,他的数据是保存在内存…

    Python 2023年5月25日
    0102
  • git 提交后Jenkins自动构建、并发布服务

    现状:当前开发在迭代中完成相关feature功能开发之后到发布到dev环境的流程是: 提交代码到git对应的分支 需要登录域账号去Jenkins服务查找相关的项目任务,再手动选择分…

    Python 2023年10月30日
    037
  • Nice to meet you, Django

    django 的安装和基本使用 pip install django 但是这样安装的应该是最新版的,想用其他版本的在 Django后加版本号 django-admin startp…

    Python 2023年8月6日
    045
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球