python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Pandas创建Series的方法

Python Pandas中创建Series的三种方法总结

作者:AHU-丁少侠

这篇文章主要介绍了Python Pandas中创建Series的三种方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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,更有一定的语义

如果我们想查看索引和值可以分别通过访问Seriesindex属性和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区别

Series的生成

生成Series:

语法结构:

Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
#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'>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文