欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Pandas数据分析 【Series | DataFrame】

Pandas数据分析 【Series | DataFrame】

2025/4/4 10:53:21 来源:https://blog.csdn.net/shijiaqingsnfx/article/details/145242157  浏览:    关键词:Pandas数据分析 【Series | DataFrame】

pandas数据分析

  • 写在前面
    • 001 List转化为Series
    • 002 Dict转化为Series
    • 003 Series转化为python list
    • 004 Series转化为DataFrame
    • 005 借助numpy创建Series
    • 006 转化Series的数据类型
    • 007 给Series添加新的元素
    • 008 将Series对象转换为DataFrame对象
    • 009 使用字典创建DF
    • 010 给DataFrame设置索引列
    • 011 生成一个月的所有天
    • 012 生成一年中的所有周一日期
    • 013 生成一天的所有小时
    • 014 用日期生成DataFrame
    • 015 生成日期和随机分布DataFrame
    • 016 打印DataFrame的前后数据
    • 017 df的信息和基本数据统计
    • 018 统计数据列出现的次数
    • 019 df前N行存入CSV文件
    • 020 加载CSV文件到df
  • 小结

写在前面

其实pandas市面上教程很多😀,之前零零碎碎自己学了很多知识点,但是缺少实操,这个库长时间不用老能忘记,这不马上又到了数模美赛了,涉及很多数据分析的时候,我又得捡起来复习一下这个库了,为了方便自己复习,这次我找了100个题目敲一遍,以博客的方式记录,减少自己之后的回顾成本。

这里我们不从头到尾讲pandas的详细知识点,因为python语言真的太易懂,最好有一点使用过pandas库的经验再来看本篇,在实际中的题目去体会这个库,我认为是最快且行之有效的,其实就算是讲pandas知识点,不也是通过案例讲吗哈哈,话不多说,开始!

001 List转化为Series

在这里插入图片描述

这道题目就是简单的将列表转化为Series对象,Series对象是pandas库里面比较重要的一个数据结构,转化成这个对象之后,更方便我们后续所做的一切数据处理,用到的方法也很简单就是使用pd.Series方法,要注意的是这个方法的第一个参数其实就是data,这里我们调用的时候可以不写,为了清晰,我这里写上了,代码如下。

import pandas as pd
courses = ["语文", "数学", "英语", "计算机"]
data = pd.Series(data=courses)
print(data)

运行结果如下(默认情况是数字索引):
在这里插入图片描述

如果上段代码你有不清楚的地方也没关系,不需要纠结,继续看下面的案例,慢慢体会即可。


002 Dict转化为Series

在这里插入图片描述
和上题类似,pd.Series方法第一个参数也可以接收一个字典,只不过这次的Series对象索引不是数字了,而变成了字典中的key

import pandas as pd
grades = {"语文": 80, "数学": 90, "英语": 85, "计算机": 100}
data = pd.Series(data=grades)
print(data)

在这里插入图片描述


003 Series转化为python list

在这里插入图片描述
如何将Series的values转化为list,在Seires对象中存在一个方法to_list()可以办到这一点,这里我们的data已经是一个Series对象了,直接调用即可,输出结果和题目要求相同。

import pandas as pd
grades = {"语文": 80, "数学": 90, "英语": 85, "计算机": 100}
data = pd.Series(data=grades)
numbers=data.to_list()
print(numbers)

004 Series转化为DataFrame

在这里插入图片描述
本道题目我们就引出了pandas中第二个重要的数据结构DataFramepandas核心就是围绕着Series对象和DataFrame对象来进行一系列的数据处理的。 DataFrame 是用来表示表格数据的,而 Series 用来表示单列数据。
本题我们调用pd.DataFrame方法,注意题目要求是有列名的,所以要指定第二个参数columns

import pandas as pd
grades = {"语文": 80, "数学": 90, "英语": 85, "计算机": 100}
data = pd.Series(grades)
df = pd.DataFrame(data, columns=['grades'])
print(df)

005 借助numpy创建Series

在这里插入图片描述

观察上图Series对象的index101到109,间隔为1,数据10到90,间隔为10,数据类型是float64

import numpy as np
import pandas as pd
data=pd.Series(np.arange(10, 100, 10), #数值为10-90,间隔为10(100取不到,第二参数是开区间)index=np.arange(101, 110), #索引是101-109,间隔为1(可以缺省)dtype=float
)
print(data)

在这里插入图片描述


006 转化Series的数据类型

在这里插入图片描述
这里介绍两种转换Series类型的方法,第一种是astype方法,此时传参传的是想要转换后的类型,第二种方法是调用map方法,传参为int,对Series对象的每个元素调用int方法,注意区分这两个方法的区别,第二个方法int是一个python中的内置函数。

import pandas as pd
s = pd.Series(data=["001", "002", "003", "004"],index=list("abcd")
)s = s.astype(int) # 方法一,这里的int是一个类型
# s = s.map(int)  # 方法二,这里的int是一个函数,注意区分
print(s)

007 给Series添加新的元素

在这里插入图片描述

其实早期版本的python有append方法,但是之后去除了,现在添加Series对象推荐使用concat方法拼接。

import pandas as pd
grades = {"语文": 80, "数学": 90, "英语": 85, "计算机": 100}
data = pd.Series(data=grades)# pandas库中有cancat方法可以拼接Serires对象
#调用参数是一个列表[原始Series,新添加的Series]
data = pd.concat([data, pd.Series({"物理": 88, "化学": 95})])
print(data)

008 将Series对象转换为DataFrame对象

在这里插入图片描述

本题我们使用一个方法reset_index,这个方法可以使得原本的Series对象的key移动到数值位,设置为用数字作索引,并且类型直接就转化为了DataFrame,之后就是修改列名就好了。

import pandas as pd
grades = {"语文": 80, "数学": 90, "英语": 85, "计算机": 100}
data = pd.Series(grades)
df = data.reset_index()
df.columns = ['course', 'grade']
print(df)

009 使用字典创建DF

在这里插入图片描述

可以借助字典直接转换,字典的key充当了列名。字典的value充当了每一列的具体数值。

import pandas as pd
df = pd.DataFrame({"姓名": ["小张", "小王", "小李", "小赵"],"性别": ["男", "女", "男", "女"],"年龄": [18, 19, 20, 18]
})
print(df)

010 给DataFrame设置索引列

在这里插入图片描述

这里可以使用df.set_index方法,这个方法第一个参数指定的是要被设置成为索引的列,第二个参数意思是原地修改,如果不设置为True的话,调用后会将新的df返回,原来的DataFrame对象不发生改变。

import pandas as pd
df = pd.DataFrame({"姓名": ["小张", "小王", "小李", "小赵"],"性别": ["男", "女", "男", "女"],"年龄": [18, 19, 20, 18]
})#从这里开始完成题目
df.set_index("姓名", inplace=True)
print(df)

011 生成一个月的所有天

在这里插入图片描述
这里注意输出的类型是DatatimeIndex类型,是日期类型的索引,freq='D'意思是按天进行递增。

import pandas as pd
#注意这里参数开始结束都是闭区间
data_range=pd.date_range(start='2021-10-01',end='2021-10-31')
#方法二:默认情况按天递增,递增31个数,输出结果同上
#data_range = pd.date_range(start='2021-10-01',periods=31)print(data_range)

012 生成一年中的所有周一日期

在这里插入图片描述

  • 可以指定按照周一递增日期freq='W-MON'
import pandas as pddata_range = pd.date_range(start='2021-01-01',end='2021-12-31' , freq='W-MON')
print(data_range)

013 生成一天的所有小时

在这里插入图片描述

  • periods个数设置为24,freq频率设置为H即可。
import pandas as pd
data_range = pd.date_range(start='2021-01-01', periods=24, freq='H')
print(data_range)

014 用日期生成DataFrame

在这里插入图片描述
代码解析:df['day_of_year']这里没有这个索引,会直接新建,df['day']是日期类型。所以可以.dt访问日期类型的方法,其中dayofyear这个属性存储了日期索引在该年的第几天

import pandas as pd
data_range = pd.date_range(start='2021-10-01', periods=31)
df = pd.DataFrame(data=data_range, columns=['day'])
# 代码走到这里,已经生成DataFrame对象了,只不过此时只有一列
df['day_of_year'] = df['day'].dt.dayofyear
print(df)

015 生成日期和随机分布DataFrame

在这里插入图片描述

  • 这里涉及到了numpy库中的 random
import pandas as pd
import numpy as np
data_range = pd.date_range(start='2021-10-01', periods=1000)
data ={'norm': np.random.normal(loc=0,scale=1,size=1000), #代表均值为0,方差为1'uniform': np.random.uniform(low=0,high=1,size=1000), #均匀分布最小值为0,最大值为1'binnormal': np.random.binomial(n=1,p=0.2,size=1000) #样本为1,发生概率为0.2
}
df = pd.DataFrame(data = data,index=data_range)
print(df)

016 打印DataFrame的前后数据

在这里插入图片描述

import pandas as pd
import numpy as np
data_range = pd.date_range(start='2021-10-01', periods=1000)
data ={'norm': np.random.normal(loc=0,scale=1,size=1000), #代表均值为0,方差为1'uniform': np.random.uniform(low=0,high=1,size=1000), #均匀分布最小值为0,最大值为1'binnormal': np.random.binomial(n=1,p=0.2,size=1000) #样本为1,发生概率为0.2
}
df = pd.DataFrame(data = data,index=data_range)
#从这里开始完成题目
print(df.head(10))
print()
print(df.tail(5))

在这里插入图片描述


017 df的信息和基本数据统计

在这里插入图片描述
这个题目主要是为了了解df.info()df.describe()这两个方法,它们非常的有用,他们可以帮助我们查看该数据结构中的一些重要的数据信息,以便后续的计算。

import pandas as pd
import numpy as np
data_range = pd.date_range(start='2021-10-01', periods=1000)
data ={'norm': np.random.normal(loc=0,scale=1,size=1000), #代表均值为0,方差为1'uniform': np.random.uniform(low=0,high=1,size=1000), #均匀分布最小值为0,最大值为1'binnormal': np.random.binomial(n=1,p=0.2,size=1000) #样本为1,发生概率为0.2
}
df = pd.DataFrame(data = data,index=data_range)
#从这里开始完成题目
print(df.info())
print()
df.describe()

在这里插入图片描述


018 统计数据列出现的次数

在这里插入图片描述

  • value_counts()这个方法就会返回一个Series对象中出现了哪些值,出现了多少次的信息。
  • 我们先用df["binnormal"]取出pandas库对应的目标列,接着直接调用该方法打印即可。
import pandas as pd
import numpy as np
data_range = pd.date_range(start='2021-10-01', periods=1000)
data ={'norm': np.random.normal(loc=0,scale=1,size=1000), #代表均值为0,方差为1'uniform': np.random.uniform(low=0,high=1,size=1000), #均匀分布最小值为0,最大值为1'binnormal': np.random.binomial(n=1,p=0.2,size=1000) #样本为1,发生概率为0.2
}
df = pd.DataFrame(data = data,index=data_range)
#从这里开始完成题目
print(df["binnormal"].value_counts())

在这里插入图片描述


019 df前N行存入CSV文件

在这里插入图片描述

  • 直接调用to_csv 方法即可。
import pandas as pd
import numpy as np
data_range = pd.date_range(start='2021-10-01', periods=1000)
data ={'norm': np.random.normal(loc=0,scale=1,size=1000), #代表均值为0,方差为1'uniform': np.random.uniform(low=0,high=1,size=1000), #均匀分布最小值为0,最大值为1'binnormal': np.random.binomial(n=1,p=0.2,size=1000) #样本为1,发生概率为0.2
}
df = pd.DataFrame(data = data,index=data_range)
#从这里开始完成题目
df.to_csv("前100行数据.csv")

在这里插入图片描述
打开文件看看(展示部分)
在这里插入图片描述

  • CSV是文本文件,对于参加数学建模的同学来说这个应该不是很陌生,因为很多题目给的数据就是.csv格式,所以学会使用pandas库处理.csv格式的数据是必要的。

020 加载CSV文件到df

在这里插入图片描述

import pandas as pd
import numpy as np
df=pd.read_csv("前100行数据.csv",index_col=0)#第二个参数是为了恢复索引列
print(df.info())
print(df.head(10))

在这里插入图片描述


小结

本篇主要是介绍了pandas库里面最重要的两个数据结构,Series对象和DataFrame对象,它们的数据处理功能十分强大,我会把这一python系列新开一份专栏,后面的题目我们结合具体情景再探讨。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词