数模数据分析—Pandas复习(1)

本文介绍了在2023年全国大学生数学建模大赛中如何使用pandas和numpy进行大规模数据处理,包括数据读取、Series和DataFrame的操作,以及缺失数据的处理方法。作者分享了自己参赛经验和学习体会。
摘要由CSDN通过智能技术生成

        今年参加了2023年全国大学生数学建模大赛,今年的C题,数据量极大,利用pandas,numpy进行数据处理以及分析极为方便,但对于编程方面的考验还是极大的,这次比赛给我感触极大,也让我明白自己学习pandas可能学习的也不是太好,在这些我将持续更新博客去复习pandas,numpy这些库,一方面为美赛做准备,一方面把我所学分享给大家。

1. 调用库

一般使用import语句来运行。

import pandas as pd

pandas内部存在两类数据类型,分别为Series以及DataFrame分别为一维以及二维表,一般数学建模用Series很少。本章简短介绍下,下面两种方式运行出来的结果都一样

t = pd.series([1,2,3],index=list("abc"))
temp_dic = {"a":1,"b":2,"c":3}
t2=pd.series(temp_dic)

2. pandas数据读取

在数学建模中使用最多的文件类型为xlsx与csv格式,可利用pandas读取表格类型文件,才可以进行后续分析,一般利用该方法读取后,类型为DataFrame类型。

csv、tsv、txt

pd.read_csv

excelpd.read_excel

一般我比较喜欢在工程下保存附件,这样的话不需要设置路径,否则调用需要设计路径路径需要使用两种格式,反斜杠\需加载r转义,斜杠不需要。

df = pd.read_excel("附件1.xlsx")#读取附件1内容
df = pd.read_csv("附件1.csv")#读取附件1内容

在读取excel时可以用sheet_name=["a"]来读取a列

其中index_col能帮助我们设置列索引。在读取csv文件时候有时候为防止乱码会用到encoding="utf-8"。假设我仅仅需要用到old 与same两列,则我可以利用usecols=["old","same"]来提取两列。如果没有列索引可以利用下列方式来实现。

data = pd.read_csv("/Users/yequ/order_withoutColumns.csv", header=None,names=["订单号","用户id","支付金额","商品价格","购买数量","支付时间"])

特殊强调:今年附件2共84w行数据,可能有一部分人选择利用mysql去建立数据库处理,处理后的文件为sql格式,故在此补充一种可能用到的方法。具体方法可以看官方文档

df = pd.read_sql(sql_sentence,connection) 

3. 数据保存

pandas提供了可以保存文件的方法,例如保存为csv,且不保存行索引标签

data.to_csv("/Users/yequ/电商数据清洗2.csv",index=false,encoding="utf-8-sig")

4. Series切片和索引

pandas可以通过位置或者索引来进行元素提取,可以取连续的或者不连续的。

t["a"]#取第一行
t[0]

t[:2]#取前两行
t[["a","b"]]

也可以条件搜索

t[t>3]#选取大于3的元素

同时可以取出索引,其类型为index型,可利用list对index型进行强制转化;也可以提取出值,类型为ndarray型。

t.index
type(t.index)#取类型
t.values
type(t.vlaues)#取类型 numpy.ndarray

5. DataFrame类型

5.1 介绍

DataFrame是在导入文件后,最经常遇到的类型,其为二维数据。

为了方便介绍,下面可以裸创建一个DataFrame去看操作,一般数模中导入就行。

pd.DataFrame(np.arrange(10).reshape(2,5))
'''
输出以结果
  0 1 2 3 4 
0 0 1 2 3 4 
1 5 6 7 8 9 
'''

可看到DataFrame提供了index(axis=0)与Columns(axis=1)分别提供行列索引。同时该方法中可以改变index与columns的索引量

pd.DataFrame(np.arange(12).reshape(4,3),index=list("abcd"),columns=list("XYZ"))

不难看到结果输出如左图所示 

与上述相似,可以提取列索引与行索引通过index跟columns

5.2 整体情况查询

df.head(5)#默认显示前五行
df.tail(5)#显示后五行
pd.isnull(df["X"])#看X列是否存在空值,若存在输出索引
df.info()#相关信息概述
df.descirbe()#快速综合统计结果

拓展:可以利用以下方法来输出空值行,

t = df["age"]
is_null = pd.isnull(t)
t[is_null]

5.3 取行或取列

可利用pandas方便的提取行或列,方括号中写数字表示取行,写索引表示取列

df[:20]["ROW_name"]#取名为ROW_name的前20行

如果我想要取特定行列可以利用下列方式,iloc取数字,loc取标签。

df.loc(["A","B"],["X","Y"])#冒号在loc重视闭合的,会选中冒号后面的数据
df.iloc([1,2])

布尔索引:如果我想要取比如ROW列超过800的,同时内部可以使用&、| 等逻辑关系符

df[df["ROW"]>800]

5.4 缺失数据处理

上述已经说过如何确定当前是否缺失,同时也有notnull方法以下介绍两种方式去进行缺失值处理:

处理方式1:删除所在行或列

df.dropna(axis=0,how='any',inplace=False)
#axis=0为行
#how默认为any,还要有一个为NAN,就删除,选择all则为全部为NAN则删除
#inplace可以不用

处理方式2:填充

df.fillna(df.mean())#均值
df.fillna(df.median())#中位数
df.fillna(0)#0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值