一条瑾瑜的小站

一条瑾瑜的小站



python pandas 模块学习

jinyu · 2025-10-03 · 105浏览 · python


本文部分资料文件请前往https://www.jinyuttsrz.top/index.php/archives/89/下载
本文部分资源来自【黑马程序员】,【菜鸟教程】 学习更多内容:前往菜鸟教程

为什么要学习pandas?

numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据

Pandas 安装

pip install pandas

2025-10-03T15:33:02.png
查看 pandas 版本

import pandas
print(pandas.__version)

若输出版本号则安装成功,如:' 2.3.3'

2025-10-03T15:33:13.png

Pandas的常用数据类型
1.series一维,带标签数组(索引)
2.dataframe二维,series容器
  1. pandas中的Series创建

import pandas as pd

pd.Series([1,2,3,4])

输出内容:#第一列为索引,第二列为数据,索引可进行指定等操作
2025-10-03T15:33:22.png

t = pd.Series([1,2,3,4])
print(type(t))

输出内容:#查看t的类型
2025-10-03T15:33:28.png

使用index指定series的索引

t2 = pd.Series([12,31,1,2],index=list("abcd"))
print(t2)

输出内容:#可以通过index进行指定series的索引
2025-10-03T15:33:41.png

通过字典创建

temp_dic={"name":"xiaoming","age":30,"tel":123}
t3 = pd.Series(temp_dic)
print(t3)

输出内容:#字典的键变为索引
2025-10-03T15:33:51.png

使用astype可以改变类型

t2.astype(float)

输出内容:

2025-10-03T15:33:59.png

  1. pandas中的Series切片与索引

在尝试取不存在的数据时,会返回nan

取单个内容
2025-10-03T15:34:07.png
2025-10-03T15:34:12.png
取多个连续的数据
2025-10-03T15:34:18.png

取多个不连续的数据

2025-10-03T15:36:07.png
使用index可以获取索引

t3.index

2025-10-03T15:36:33.png
可以通过for循环遍历index:

for i in t3.index:
    print(i)

2025-10-03T15:36:47.png
可对index进行常见操作
len,list强类型转化等
2025-10-03T15:37:01.png

Values的类型与查询

t3.values
print(type(t3.values))

2025-10-03T15:37:11.png

  1. pandas中的DataFrame

    2025-10-03T15:37:32.png
    使用DataFrame创建pandas中的DataFrame

import pandas as pd
import numpy as np
pd.DataFrame(np.arange(12).reshape(3,4))

2025-10-03T15:37:36.png
使用index和columns对行和列索引进行修改

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

2025-10-03T15:39:12.png
使用字典创建dataframe

d1={"name":["a","b"],"age":[11,12],"tel":[123,345]}
t1 = pd.DataFrame(d1)
print(t1)
print(type(t1))

2025-10-03T15:39:16.png
当数据不完全时,会自动使用nan进行占位

d1=[{"name":"a","age":12,"tel":123},{"name":"b","age":13}]
pd.DataFrame(d1)

2025-10-03T15:39:29.png

  1. DataFrame的常见操作

    2025-10-03T15:39:36.png
    2025-10-03T15:39:53.png

  2. Pandasd的loc取数据

    2025-10-03T15:40:07.png
    2025-10-03T15:40:11.png

  3. pandas外部数据读取

(一)打印表内所有内容

import pandas as pd

df = pd.read_csv('dogNames2.csv')
print(df)

输出结果:

2025-10-03T15:40:28.png
(二)打印前几行的内容,打印综合信息

import pandas as pd
df = pd.read_csv('dogNames2.csv')
print(df.head()) #默认显示5个
print(df.info()) #打印综合信息

输出内容:
2025-10-03T15:40:38.png

(三)对数据行Count_AnimalName从大到小排列,并展示前十项

import pandas as pd
df = pd.read_csv('dogNames2.csv')

df=df.sort_values(by="Count_AnimalName",ascending=False)
by对Count_AnimalName进行排序,ascending参数为(T)升序或(F)降序
print(df.head(10))

输出内容:
2025-10-03T15:40:53.png

注意pandas的取行或列的注意点:

方括号写数组,表示取行,对行进行操作 写字符串,表示对取列索引,对列进行操作

取某一列的方法:df[“Count_AnimalName”] 同时选择行和列的方法df:100

  1. pandas的布尔索引

(一) 找到使用次数在800-1000次的狗的名字
注意点:不同的条件之间需要用括号括起来

import pandas as pd
df = pd.read_csv('dogNames2.csv')
df=df.sort_values(by="Count_AnimalName",ascending=False)

print(df[(800<df["Count_AnimalName"])&(df["Count_AnimalName"]<1000)])

输出内容:

2025-10-03T15:41:10.png
(二)找到所有的使用次数超过700并且名字的字符串的长度大于4的狗的名字

2025-10-03T15:41:24.png

  1. pandas的字符串方法

    2025-10-03T15:41:30.png

  2. pandas缺失数据的处理

对数据的判断:pd.isnull()和pd.notnull()

import numpy as np
t = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))
t.iloc[1:,:2]=np.nan
print(t)

2025-10-03T15:41:43.png

仅显示不含nan的数据行(使用布尔索引)

t[pd.notnull(t["w"])]

2025-10-03T15:42:19.png

pd.notnull(t["w"])

2025-10-03T15:42:39.png

删除nan所在行:(dropna)

dropna (axis=0,how='any',inplace=False)

axis:对哪个轴进行修改
how:any或者all 。当参数为all时,只对哪一行全是all才会执行删除
inplace=True:在原数据上进行修改,返回None;inplace=False:返回为修改过的数据,原数据不变
2025-10-03T15:42:52.png

  1. pandas的常用统计方法

假设现在我们有一组从2006年到2016年1000部最流行的电影数据,我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?

(一)查看数据信息

import pandas as pd
file_path = "IMDB-Movie-Data.csv"
df = pd.read_csv(file_path)
print(df.info)

2025-10-03T15:43:22.png

print(df.head(1))

2025-10-03T15:44:11.png
(二)实验代码

import pandas as pd

file_path = "IMDB-Movie-Data.csv"
df = pd.read_csv(file_path)
获取平均分
print(df["Rating"].mean())
获取导演的人数
print(len(df["Director"].unique()))
获取演员的人数
temp = df["Actors"].str.split(",").tolist()
actors = [i for j in temp for i in j]
actors_num = len(set(actors))
print(actors_num)

2025-10-03T15:44:22.png
2025-10-03T15:44:34.png

  1. pandas的字符串离散化案例

对于这一组电影数据,如果我们希望统计电影分类(gene)的情况,应该如何处理数据?
思路:重新构造一个全为0的数组,列名为分类,如果某一条数据中分类出现过,就让0变为1

import pandas as pd
import numpy as np
file_path = "./IMDB-Movie-Data.csv"
df = pd.read_csv(file_path)

统计分类的列表
temp_list = df["Genre"].str.split(",").tolist()
genre_list = list(set([i for j in temp_list for i in j]))

构造全为0的数组
zeros_df = pd.DataFrame(np.zeros((df.shape[0],len(genre_list))),columns=genre_list)

给每个电影出现分类的位置赋值1
for i in range(df.shape[0]):
    zeros_df.loc[i,temp_list[i]] = 1

统计每个分类的电影的数量和
genre_count = zeros_df.sum(axis=0)

排序
genre_count = genre_count.sort_values()
print(genre_count)

2025-10-03T15:44:44.png

  1. pandas的数据合并

    2025-10-03T15:44:54.png
    2025-10-03T15:45:04.png

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.ones((2, 4)), index=["A", "B"], columns=list("abcd"))
df2 = pd.DataFrame(np.zeros((3, 3)), index=["A", "B", "C"], columns=list("xyz"))

print(df1.join(df2),end='\n\n')
print(df2.join(df1),end='\n\n')

df3 = pd.DataFrame(np.arange(9).reshape(3, 3), columns=list("fax"))

df1.loc["A","a"] = 100
print(df1,end='\n\n')
print(df3,end='\n\n')
print(df1.merge(df3, on="a",how="inner"),end="\n\n")  #内连接,将交集合并
print(df1.merge(df3, on="a",how="outer"),end="\n\n")   #外连接
print(df1.merge(df3, on="a",how="left"),end="\n\n")
print(df1.merge(df3, on="a",how="right"),end="\n\n")

输出内容:

     a    b    c    d    x    y    z
A  1.0  1.0  1.0  1.0  0.0  0.0  0.0
B  1.0  1.0  1.0  1.0  0.0  0.0  0.0

     x    y    z    a    b    c    d
A  0.0  0.0  0.0  1.0  1.0  1.0  1.0
B  0.0  0.0  0.0  1.0  1.0  1.0  1.0
C  0.0  0.0  0.0  NaN  NaN  NaN  NaN

       a    b    c    d
A  100.0  1.0  1.0  1.0
B    1.0  1.0  1.0  1.0

   f  a  x
0  0  1  2
1  3  4  5
2  6  7  8

     a    b    c    d  f  x
0    1.0  1.0  1.0  1.0  0  2

       a    b    c    d    f    x
0    1.0  1.0  1.0  1.0  0.0  2.0
1    4.0  NaN  NaN  NaN  3.0  5.0
2    7.0  NaN  NaN  NaN  6.0  8.0
3  100.0  1.0  1.0  1.0  NaN  NaN

       a    b    c    d    f    x
0  100.0  1.0  1.0  1.0  NaN  NaN
1    1.0  1.0  1.0  1.0  0.0  2.0

     a    b    c    d  f  x
0  1.0  1.0  1.0  1.0  0  2
1  4.0  NaN  NaN  NaN  3  5
2  7.0  NaN  NaN  NaN  6  8
  1. pandas的分组聚合

    2025-10-03T15:45:16.png

    2025-10-03T15:45:24.png

  2. pandas的复合索引

    2025-10-03T15:45:33.png
    2025-10-03T15:45:36.png
    2025-10-03T15:45:41.png
    2025-10-03T15:45:44.png





comment 评论区

添加新评论





  • ©2025 bilibili.com

textsms
内容不能为空
account_circle
昵称不能为空
email
邮件地址格式错误
web
beach_access
验证码不能为空
keyboard发表评论


star_outline 咱快来抢个沙发吧!




©2025 一条瑾瑜的小站

Theme Romanticism2.1 by Akashi
本站已在国内备案: 赣ICP备2025057350号