Python数据分析基础篇【Pandas的基础语法讲解】


文章目录


前言

Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来,享有数据分析“三剑客之一”的盛名(NumPy、Matplotlib、Pandas)。具有强大的数值计算能力,是Python数据分析的重要角色。 本文使用csv,excel文件进行讲解,且主要讲Series、DataFrame两种数据结构,易于理解。


一、两种重要的数据结构(Series、DataFrame)

1.Series(“一维数组”)

Series是类似一维数组的一种对象,它由一组对象及它的索引组成。

创建一个简单的Series对象

import pandas as pd

p = pd.Series(["a", "b", "cdefg", "1", 2])   #列表
print(p)

在这里插入图片描述

指定索引

import pandas as pd

p = pd.Series({"a":"一","b":2,"c":"3"}) # 字典
print(p)

在这里插入图片描述

指定索引,index参数

import pandas as pd

p = pd.Series(["a", "b", "cdefg", "1", 2],index=[1,2,3,4,"五"])
print(p)

在这里插入图片描述

index获取索引

import pandas as pd

p = pd.Series(["a", "b", "cdefg", "1", 2],index=[1,2,3,4,"五"])
print(p.index)

在这里插入图片描述

values获取值

import pandas as pd

p = pd.Series(["a", "b", "cdefg", "1", 2], index=[1, 2, 3, 4, "五"])
print(p.values, type(p.values), p.values[0], sep="\n")

在这里插入图片描述

2.DataFrame(“类似Excel”)

二维数据结构,一组数据对应一对行列索引,像Excel表格。一般用其打开表格数据。

import pandas as pd

df=pd.DataFrame(pd.read_excel("aa.xlsx"))  #  xxx.csv
print(df)

创建一个DataFrame

import pandas as pd

d = pd.DataFrame(['a', 'b', 'c', 'd'])
print(d)

在这里插入图片描述

通过嵌套列表创建DataFrame

import pandas as pd

d = pd.DataFrame(['a', 'b', 'c', 'd'], [1, 2, 3, 4])  # index=[1,2,3,4],并不是嵌套(注意)
d1 = pd.DataFrame([['a', 'b', 'c', 'd'], [1, 2, 3, 4]])
d2 = pd.DataFrame([[1], [2, 2], [3, 3, 3]])
print(d, d1, d2, sep="\n\n")

在这里插入图片描述

columns指定列索引

import pandas as pd

d = pd.DataFrame([['a', '一'], ['b', '二']], columns=['字母', '数字'])
print(d)

index行索引

import pandas as pd

d = pd.DataFrame([['a', '一'], ['b', '二']], columns=['字母', '数字'],index=["AAA","BBB"])
print(d)

传入字典,键为列索引

import pandas as pd

d = pd.DataFrame({"字母": ['a', 'b', 'c', 'd'], "数字": [1, 2, 3, 4]})  # 字典值的长度不一样会报错
print(d)

columns获取列索引,index获取行索引

import pandas as pd

d = pd.DataFrame({"字母": ['a', 'b', 'c', 'd'], "数字": [1, 2, 3, 4]})  # 字典值的长度不一样会报错
print(d.columns, d.index)

二、读取、写入数据

读取Excel,csv文件

import pandas as pd

df=pd.read_excel("文件名.xlsx")   #读取Excel

df1=pd.read_csv("xxx.csv",encoding="utf-8",sep=",")  # 读取csv文件

读取其他格式的文件


使用pycharm的小伙伴,可以先按住Ctrl键,将鼠标移到导包pandas关键字,当关键字出现下划线时,再点击pandas,查看源代码,查看其他文件读取函数及参数设置。该方法适合所有模块查看源代码。


将数据写入文件(以csv,Excel为例)

import pandas as pd

df = pd.read_excel("zzz.xlsx")
df1 = pd.read_csv("xxx.csv", encoding="utf-8", sep=",")
df.to_excel("zzzzz.xslx")
df1.to_csv("yyy.csv")

"""
多学一招
当我们使用Excel查看csv文件时,或者直接修改后缀名(.csv改成.xlsx)时,会出现乱码。这时需要我们,在Excel里面改编码格式。
但是我们可以使用Python语言实现,改后缀名不乱码

import pandas as pd

df=pd.read_csv("xxx.csv", encoding="utf-8", sep=",")  #读csv
df.to_excel("xxx.xslx")  # 存Excel  (默认有行列索引,可以通过参数消除,记得查看源代码)
"""

三、数据预处理

查看数据信息

import pandas as pd

df = pd.read_csv("xxx.csv", encoding="utf-8")
df.info()  # 查看数据维度,列名称等数据的基础信息
print(df.shape)  # 返回行列数,(行,列)
df.isnull()  # 判断空值,空值为True,非空为False
print(df.columns)  # 查看列索引名称
df.head()  # 查看前五条数据
df.tail()  # 查看后五条数据
print(df.describe())  # 基础统计信息

缺失值处理(数据清洗)

import pandas as pd

df = pd.read_csv("财务.csv", encoding="utf-8")
df.dropna()  # 删除缺失值的行,确失一个数据就删除整行
df.dropna(how="all")
"""
* 'any' : If any NA values are present, drop that row or column.
* 'all' : If all values are NA, drop that row or column.
"""
df.fillna(0)  # 将所有缺失值填充为0
df.fillna({"科目": "现金"})  # 将”科目“列缺失值填充为”现金“
# 多列填充时,使用多对键值对{"科目": "现金","金额":0}

数据重复值处理

import pandas as pd

df = pd.read_csv("财务.csv", encoding="utf-8")
df.drop_duplicates()  # 对所有数值进行判断,保留重复的第一行
df.drop_duplicates(subset="科目")  # 对科目列进行去重复值
df.drop_duplicates(subset=["科目", "票据号"])  # 多列去重复值
df.drop_duplicates(subset="科目", keep=False)  # 把重复全部删除
"""
keep : {'first', 'last', ``False``}, default 'first'
            Determines which duplicates (if any) to keep.

            - 'first' : Drop duplicates except for the first occurrence.
            - 'last' : Drop duplicates except for the last occurrence.
            - ``False`` : Drop all duplicates.

"""

四、数据类型转换

查看某一列的数据类型

df["年龄"].dtype

数据类型转换

df["年龄"].dtype
df["年龄"].astype("float64")

五、数据的选择

1.列数据选择

df["科目"] # 选择科目列数据
df[["科目","票据号"]] # 选择多列数据

# 使用iloc函数选择列数据
df.iloc[:,[0,2]] # 选择第一列和第三列数据

2.行数据选择

选择一行数据

df.loc["7月8日"]
df.iloc[0] # 选择第一行数据

选择多行数据

df.loc["7月8日","7月15日"]
df.iloc[[0,2]] # 选择第一行和第三行数据

3.选择满足条件的行列数据(数据筛选)

选择满足一种条件的行数据

df[df["年龄"]>30]

选择满足多种条件的行数据

df[(df["年龄"]>30) & (df["年龄"]<60)]

4.按日期数据的筛选

#转换时间类型
from datetime import datetime
# datetime 的用法,可以查看源代码
df["日期"]=pd.to_datetime(df["日期"])  # 2023-8-5
df[df["注册日期"] == datetime(2023,8,5)]
df[df["注册日期"] >= datetime(2023,8,5)]

六、数值排序

按某列数值排序

df.sort_values(by=["编码"],ascending=False)

按索引进行行排列

df.sort_index()

按多列数据进行行排列

df.sort_values(by=["年龄","编号"],ascending=[False,True])

七、数据计数与唯一值选择

数值计数

df["年龄"].value_conuts()

唯一值获取

df["年龄"].unique()

八、数据运算

1.算术运算

df["一月金额"]+df["二月金额"]
df["一月金额"]+df["二月金额"]*2

2.比较运算

df["一月金额"]>df["二月金额"]

3.汇总运算

count计算非空值

df.count() # 对各列
df['年龄'].count() # 年龄列非空值
df.count(axis=1) # 求各行非空值

sum求和以及其他数值运算函数

df.sum() # 对各列求和
df["一月份金额"].sum() # 对某一列求和
df.sum(axis=1) 对各行进行求和

# 其他其他数值运算函数,参考sum方法
# mean ,求平均值
# max , 求最大值
# min , 求最小值
# median , 求中位数
# mode ,求众数
# var ,求方差
# std ,求标准差
# quantile , 求分位数,使用df.percentile(0.25),求各列1/4分位数

4.相关性运算

用来衡量两个事物之间的相关程度。如皮尔逊相关系数。

df.correl() # 求整个表两个字段两两之间的相关性
df['一月金额'].correl(df['二月金额'])

九、数据分组(汇总)

按一列进行分组并对所有列进行计数汇总

df.groupby("店名").count()
df.groupby("店名").sum() # 求和

按多列进行分组并对所有列进行求和

df.groupby(["店名","品种"]).sum() # 求和

按一列进行分组并对指定列进行求和

df.groupby("店名")["数量"].sum()

按一列进行分组并对所有列进行求和与计数

df.groupby("店名").aggregate(["count","sum"])

按一列进行分组并对多列进行不同求和与计数

df.groupby("店名").aggregate({"品种":"count","销售金额":"sum"})

十、数据拼接

1.merge()横向拼接

import pandas as pd

d1 = pd.DataFrame(pd.read_csv("2022年业绩.xlsx"))
d2 = pd.DataFrame(pd.read_csv("2023年业绩.xlsx"))
d3 = pd.DataFrame(pd.read_csv("2024年业绩.xlsx"))
d4 = pd.DataFrame(pd.read_csv("2025年业绩.xlsx"))
d5 = pd.DataFrame(pd.read_csv("2026年业绩.xlsx"))
pd.merge(d1, d2)  # 公共列连接两个数据
pd.merge(d1, d3, on=["部门", "编号"])  # 指定键连接两个数据
pd.merge(d1, d4, left_on="部门", right_on="编号")  # 两个表没有公共列,指定键连接两个数据
pd.merge(d1, d5, on="编号", how="inner")  # 重复列名的处理

2.concat()纵向拼接

import pandas as pd

d1 = pd.DataFrame(pd.read_csv("2022年业绩.xlsx"))
d2 = pd.DataFrame(pd.read_csv("2023年业绩.xlsx"))
pd.concat([d1, d2])  # 类似俄罗斯方块,一个堆在另一个上面

3.append()纵向拼接

import pandas as pd

d1 = pd.DataFrame(pd.read_csv("2022年业绩.xlsx"))
d2 = pd.DataFrame(pd.read_csv("2023年业绩.xlsx"))
d3=d1.append(d2)  # 类似俄罗斯方块,一个堆在另一个上面,像pd.concat([d1, d2]) 。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

额狮虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值