Python Pandas中创建Series的三种方法总结
作者:AHU-丁少侠
Pandas中创建Series的三种方法
一、通过列表创建
# encoding=utf-8 import pandas as pd # 定义一个列表 a = [1, 2, 3, 4] s1 = pd.Series(a) print(s1)
运行结果:
第一列为索引,是Series
在创建时默认生成的,第二列即为值,通过type(s1)
命令即可看到s1
的数据类型为:pandas.core.series.Series
,我们也可以将第四行的代码改为:
`s1 = pd.Series(a, index=["a", "b", "c", "d"])`
重新设置我们的索引,这样原先的索引就从0,1,2,3
变为了a,b,c,d
,更有一定的语义。
如果我们想查看索引和值可以分别通过访问Series
的index
属性和values
属性:
二、通过数组创建
这里的数组值的是numpy
中的数组,它是对python列表的深度封装。
我们来看代码:
# encoding=utf-8 import pandas as pd import numpy as np # 定义数组 arr = np.arange(1, 5) s2 = pd.Series(arr) print(s2)
运行结果:
可以看到,也成功创建了一个Series
。
三、通过字典创建
关于Series
,笔者认为它更像一个有序的大字典,因此我们用操作字典的习惯操作Series
往往能得心应手。
我们来看如何通过字典创建一个Series
:
# encoding=utf-8 import pandas as pd # 创建一个字典 dic = {"name": "丁少侠", "age": 20, "grade": [100, 99, 88]} s3 = pd.Series(dic) print(s3)
运行结果:
这里我们已经成功创建了一个存放学生信息的Series
,由于字典自带key
,因此索引也就自然创建了。
如果我们希望grade
放在第一列,应该怎么设置呢?我们只需要修改第5行代码:
s3 = pd.Series(dic, index=["grade", "name", "age"])
此时,index
参数的功能不再是设置索引,而是根据索引排序,因为字典本身自带索引。
另外,假如我们将第5行代码修改为以下呢:
s3 = pd.Series(dic, index=["grade", "name", "age", "sex"])
可以看到,因为这位同学的性别未知,创建的Series
中,sex
这一栏就只能填NaN
了,通过赋值,即可确定性别。
s3["sex"]="男"
看,像不像字典的操作!!!!那么我们顺着操作字典的思路再试着操作s3
,再添加一个属性:hobby
:
s3["hobby"] = ["code,basketball,sleep"]
关于Series
的操作无非增删改查,这里我们点到为止。
Python pandas,pandas.series,series的主要方法
Pandas安装
pip install pandas
numpy和pandas区别
numpy
:生成的是ndarray,数组pandas
:基于numpy,生成两种对象,一种是series,一种是dataframe。series
:一维数组类似array,series=索引+数据。区别是Series能保存不同种数据类型,字符串、boolean值、数字等,而numpy只能存储同类型数据。dataframe
:二维的表格型数据结构,是组合的series。dataframe 的每一行和每一列都是一个series。
Series的生成
生成Series:
语法结构:
Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
data
:可传入数组,可迭代对象,字典或标量值index
:以数组或列表形式传入自定义索引,若不传值,则默认[0,1,2…n],索引的个数需与data的长度相等name
: 自定义series的名字,默认none
#Series实例 import pandas as pd from pandas import Series seri=pd.Series([3,5,-2,9],index=['a','b','c','d']) print(seri) print(type(seri)) #输出 a 3 b 5 c -2 d 9 dtype: int64 <class 'pandas.core.series.Series'>
Series的主要方法
1.** 获取series的值:
series.values,:以ndarray结构输出
import pandas as pd from pandas import Series seri=pd.Series([3,5,-2,9],index=['a','b','c','d']) print(seri.values) print(type(seri.values)) #输出 [ 3 5 -2 9] <class 'numpy.ndarray'> #生成series时传入的值是list结构,输出的仍是 ndarray结构
获取series的索引:
series.index,:以pandas index 结构输出 import pandas as pd from pandas import Series seri=pd.Series([3,5,-2,9],index=['a','b','c','d']) print(seri.index) print(type(seri.index)) #输出: Index(['a', 'b', 'c', 'd'], dtype='object') <class 'pandas.core.indexes.base.Index'>
通过索引找到对应值:两种方法:通过位置查找/通过索引名称查找
import pandas as pd from pandas import Series seri=pd.Series([3,5,-2,9]) seri.index=["a","b","c","d"] print(seri["a"]) #通过索引名称查找,类似字典 print(seri[0:3])#通过位置切片查找,类似列表/数组 #输出 3 a 3 b 5 c -2
将字典转换成series:key对应变成index,value为值
import pandas as pd from pandas import Series dic={"a":"5","n":"6","k":"0"} seri=pd.Series(dic) print(seri) #输出 a 5 n 6 k 0
查找缺失数据:返回缺失数据的索引和非缺失数据的索引+值
import pandas as pd from pandas import Series dic={"a":'',"n":"","k":"0"} seri=pd.Series(dic) print(seri.isnull) #输出: <bound method Series.isnull of a n k 0
判断series中是否存在缺失数据:seri.isnull().any(),输出布尔值
注:numpy.nan 是生成确实数据的方法,nan: not a num
import numpy as np import pandas as pd from pandas import Series dic={"a":np.nan,"n":np.nan,"k":"f"} seri=pd.Series(dic) print(seri.isnull().all()) #输出: False #ps: 判断series中是否都为缺失数据:series.isnull().any(),输出布尔值
去重:series.unique()
import pandas as pd from pandas import DataFrame from pandas import Series data=["a","k","m","a","w","m","9"] obj=Series(data) uniques=obj.unique() print(uniques) #输出: ['a' 'k' 'm' 'w' '9'] #注:也可以用python 的set函数, print(set(data)) #输出 {'m', 'w', '9', 'a', 'k'} #区别: set去重后会改变原来的顺序,而unique不会 set生成的事set对象 <class 'set'>,而unique生成的事ndarray对象 <class 'numpy.ndarray'>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。