【Python系列】(二)Pandas常用函数

上一篇介绍了Pandas和Numpy这两个包,个人认为比较常用且方便的是Pandas,因此代码第一篇对Pandas的常用函数做一些介绍。

做简单的数据分析用Jupyter Notebook非常方便,利用写这篇文章正好也做一些整理,避免每次都去翻一大堆ipynb文件。

遇到问题优先参考Pandas官方说明文档。

←下载Anaconda,打开Jupyter Notebook

0. 配置镜像源

Anaconda配置镜像源_anaconda镜像源配置_ImperfectGirl的博客-CSDN博客Anaconda配置镜像源的两种方式(Anaconda prompt 和 Anaconda Navigator)https://blog.csdn.net/qq_32650831/article/details/127952502?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168000713516800182743712%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168000713516800182743712&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-127952502-null-null.142%5Ev76%5Einsert_down2,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&utm_term=%E9%85%8D%E7%BD%AE%E9%95%9C%E5%83%8F%E6%BA%90&spm=1018.2226.3001.4187参考这篇配置好即可

1. 万事第一步——安装并导入包

本篇先讲直接在notebook里用pip安装

notebook运行cells的快捷键↓

输入以下代码,Shift+Enter运行

!pip install pandas
!pip install numpy

 看到Successfully install 即安装完成

然后就可以导入了,无报错即安装成功

import pandas as pd
import numpy as np

2. 第二步——读写数据及查看信息

因为导入导出的数据一般都来自于gis,所以空间分析数据一般用.csv格式

【重要】导出csv之后请另存一个excel格式做分析,N次做完直接保存然后丢失所有格式、图片、数据透视表

# 读取数据命名根据自己的分析内容,这里以简单的df代替分析的dataframe
df = pd.read_csv('D://005//03-Data//visitation_data_ca.csv')
df = pd.read_csv('D://005//03-Data//visitation_data_ca.csv', encoding='gbk') #如有中文使用gbk编码

# 将df显示完整
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
pd.set_option('max_colwidth',100)

# 打印数据信息
print(df) #打印所有数据,最下面一行会有row和column的数量
print(df.shape) #打印数据的形状
print(df.head(5)) #打印数据前五行

# 把处理好的数据写为csv
df.to_csv('D://005//03-Data//visitation_data_ca_process.csv', index=False) #index=False表示不写出索引行

3. 数据清洗

数据清洗是非常重要且关键的一步,大部分空间分析所用数据都存在缺失等问题。

3.1 首先查看数据信息

df.info()

3.2 查找并处理空缺数据

# 是否空值判断
df.isnull()
df.isna()

# 每列是否含有空值判断
df.isnull().any()

# 对于空间分析来说,一般会把空值行去掉
df.dropna()
# 再打印df的行列数看看
df.shape

# 但比如手机信令数据,需要全覆盖的基站数据,就要考虑填充空值
# 用相邻的值填充空值,比如
df.fillna(method="bfill",inplace=True)

4. 筛选数据

参考Python pandas 根据指定条件筛选数据_pandas筛选符合条件的数据_永远在减肥永远110的的小潘的博客-CSDN博客1、构造dataframeimport pandas as pdimport numpy as npdf=pd.DataFrame(np.arange(16).reshape(4,4),columns=["sh","bj","sz","gz"],index=["one","two","three","four"])2、筛选出"sh"列大于5的数据法一:直接筛选,适用于一些比较简单直接的筛选,这种方式方便快捷。df[df["sh"]>5]法二:函数筛选,适用于比较复杂的条件筛选,函https://blog.csdn.net/p1306252/article/details/114879951?ops_request_misc=&request_id=&biz_id=102&utm_term=pandas%E7%AD%9B%E9%80%89%E6%95%B0%E6%8D%AE&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-114879951.142%5Ev77%5Einsert_down38,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&spm=1018.2226.3001.4187

# 构建dataframe
df = pd.DataFrame(np.arange(16).reshape(4,4),columns=["sh","bj","sz","gz"],index=["one","two","three","four"])

4.1 基于数值比较筛选

方法一:直接简单筛选

df[df["sh"]>5] # 筛选大于5
df[df["sh"]==5] # 筛选等于5

方法二:利用匿名函数筛选

df[df["sh"].map(lambda x:x>5)]
df[df["sh"].map(lambda x:x==5)]

方法三:利用isin()函数多值筛选

df[df["sh"].isin([5])]

4.2 模糊筛选

方法一:str.contains()函数

province = pd.DataFrame(['广东', '广西', '福建', '福建省'], columns=['省份'])
province.loc[province["省份"].str.contains("福")] # 筛选出福建省数据

方法二:正则匹配

import re
province = pd.DataFrame(['广东', '广西', '福建', '福建省'], columns=['省份'])
# 自定义函数,如果包含“广”字,则返回True,否则返回False
def func(x):
    if re.search(".*广.*",x):
        return(True)
    else:
        return(False)
province[province["省份"].apply(func)]

方法三:切片

df = pd.DataFrame({"date":["2020efgdh0228","2021hijik0228","2019hokh0201"],"value":[9999,777,4]})

# 筛选出2019年的数据
df[df["date"].map(lambda x:x[0:4])=="2019"]

5. Groupby函数分组

参考

pandas之groupby函数_pandas groupby_米法·的博客-CSDN博客sql中的分组语句group by很重要,pandas中也有类似的分组函数,即groupby,本文就主要介绍下它的用法。https://blog.csdn.net/TSzero/article/details/115430661?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-6-115430661-blog-79839363.235%5Ev27%5Epc_relevant_recovery_v2&spm=1001.2101.3001.4242.6&utm_relevant_index=9

# 创建dataframe
data = {'name': ['apolo', 'apolo', 'apolo', 'adm', 'adm', 'adm', 'bolon', 'bolon', 'bolon', 
                  'ali', 'ali', 'ali', 'cathy', 'cathy', 'cathy', 'jack', 'jack', 'jack'],
         'subjects': ['math', 'english', 'chinese', 'math', 'english', 'chinese', 'math', 'english', 'chinese',
                      'math', 'english', 'chinese', 'math', 'english', 'chinese', 'math', 'english', 'chinese'],
         'grades' : [89, 78, 84, 89, 83, 85, 77, 88, 79, 89, 86, 83, 95, 90, 94, 78, 70, 80]
        }
df = pd.DataFrame(data)
df

# 求平均值(会输出每个学生的平均成绩)
df.groupby('name').mean()

# 用聚合函数求平均和最小值(输出平均成绩和最低成绩)
df.groupby('name').agg(['mean', 'min'])

# 传入自定义的面向分组的函数
df.groupby('name').apply(lambda x:x[x['subjects'] == 'math']['grades'].mean() - x[x['subjects'] == 'english']['grades'].mean())

6. dataframe, array, list格式互换

# array转dataframe
df = pd.DataFrame(array)

# dataframe转array
array1 = np.array(df)

# list转dataframe
df = pd.DataFrame(mylist1, columns=['name1', 'name2', 'name3']) 

# dataframe转list
mylist2 = df['name1'].to_list()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值