Python之Pandas的基本指令使用

介绍

简介

Pandas是Python 的一个第三方数据分析包,最初被用作金融数据分析工具而开发出来,因此 Pandas 对时间序列分析提供了很好的支持。

Pandas是为了解决数据分析任务而开发的,纳入了大量的标准数据模型,提供了高效的操作大型数据集所需要的工具。

Pandas提供了大量的能够快速便捷地处理数据的函数和方法,包含了高级数据结构,以及让数据分析变得快速、简单的工具。

与NumPy区别

Series是一维数组。与NumPy的数组不同,数组中只允许存储相同类型的数据,而Series中可以存储不同类型的数据。

DataFrame是二维数组。它的列通过columns来索引,行通过index来索引,也就是说数据的位置是通过列和索引来确定的。非常接近EXCEL表格中的数据表。

使用

一维数组Series

创建一个一维数组。

import pandas as pd

a=pd.Series(["orange","apple","watermelon","banana"])

print(a)

输出结果:

0        orange
1         apple
2    watermelon
3        banana
dtype: object

可以查看数组的属性

import pandas as pd

a=pd.Series(["orange","apple","watermelon","banana"])

print(a.index)

print(a.values)

输出结果:

RangeIndex(start=0, stop=4, step=1)
['orange' 'apple' 'watermelon' 'banana']

Series默认创建的索引为整型,可以指定其他类型。然后按索引查找。

import pandas as pd

a=pd.Series(["orange","apple","watermelon","banana"],
            index=["o","a","w","b"])

print(a["o"])

print(a["b"])

输出结果:

orange
banana

Series与NumPy的array比较类似。

二维数组DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每一列的数据类型都是相同的,不同的列之间数据类型可以不同。

与数据库相类比,DataFrame很像是一个数据库表。DataFrame中的每一行是一个记录,是名称为Index的一个元素,而每一列是一个字段,对应数据库表的一个属性。

与数据库表不同的是,DataFrame中面向行和面向列的操作基本上是平衡的。DataFrame既有行索引也有列索引,可以被看作是由 Series组成的字典(共用同一个索引)。事实上,DataFrame中的数据以一个或多个二维块的形式存放,而不是列表、字典或别的一维结构。

创建DataFrame

首先创建一个字典,再根据字典创建DataFrame

import pandas as pd

zidian={"name":["zhao","qian","sun","li"],
        "age":[21,22,23,24],
        "degree":["大专","本科","硕士","博士"]}

df=pd.DataFrame(zidian)

print(df)

输出结果:

   name  age degree
0  zhao   21     大专
1  qian   22     本科
2   sun   23     硕士
3    li   24     博士

注意左边自动加了一列索引,从0开始。

列表的顺序同时也可以修改

import pandas as pd

zidian={"name":["zhao","qian","sun","li"],
        "age":[21,22,23,24],
        "degree":["大专","本科","硕士","博士"]}

df=pd.DataFrame(zidian,columns=["degree","name","age"])

print(df)

输出结果:

  degree  name  age
0     大专  zhao   21
1     本科  qian   22
2     硕士   sun   23
3     博士    li   24

创建索引

使用单独的索引列表

方法同Series一样

import pandas as pd

zidian={"name":["zhao","qian","sun","li"],
        "age":[21,22,23,24],
        "degree":["大专","本科","硕士","博士"]}
        
df=pd.DataFrame(zidian,index=["Z","Q","S","L"])

print(df)

输出结果:

   name  age degree
Z  zhao   21     大专
Q  qian   22     本科
S   sun   23     硕士
L    li   24     博士
使用某一列数据做索引

可以直接调用某一列内容做索引,然后为了美观可以隐藏某一列。

import pandas as pd

zidian={"name":["zhao","qian","sun","li"],
        "age":[21,22,23,24],
        "degree":["大专","本科","硕士","博士"]}

df=pd.DataFrame(zidian,
                index=zidian["name"],
                columns=["degree","age"])
print(df)

输出结果:

     degree  age
zhao     大专   21
qian     本科   22
sun      硕士   23
li       博士   24
修改索引

直接修改索引值

import pandas as pd

zidian={"name":["zhao","qian","sun","li"],
        "age":[21,22,23,24],
        "degree":["大专","本科","硕士","博士"]}

df=pd.DataFrame(zidian,columns=["degree","name","age"])

df.index=[15,16,17,18]

print(df)

输出结果:

   degree  name  age
15     大专  zhao   21
16     本科  qian   22
17     硕士   sun   23
18     博士    li   24

注意索引列表元素必须与DataFrame的元素数相等。

存取数据

取整列

类似字典标记的方式或属性的方式。

import pandas as pd

zidian={"name":["zhao","qian","sun","li"],
        "age":[21,22,23,24],
        "degree":["大专","本科","硕士","博士"]}

df=pd.DataFrame(zidian,columns=["degree","name","age"])

print(df["age"])

print(df.degree)

输出结果:

0    21
1    22
2    23
3    24
Name: age, dtype: int64
0    大专
1    本科
2    硕士
3    博士
Name: degree, dtype: object
取整行

loc方法按键取行。

import pandas as pd

zidian={"name":["zhao","qian","sun","li"],
        "age":[21,22,23,24],
        "degree":["大专","本科","硕士","博士"]}

df=pd.DataFrame(zidian,columns=["degree","name","age"])

print(df.loc[0])

输出结果:

degree      大专
name      zhao
age         21
Name: 0, dtype: object
存取字段

可以通过确定列和行来查找和修改字段,注意行列的先后有区别。
先行后列df.[index][columns]
先列后行df[columns][index]

import pandas as pd

zidian={"name":["zhao","qian","sun","li"],
        "age":[21,22,23,24],
        "degree":["大专","本科","硕士","博士"]}

df=pd.DataFrame(zidian,columns=["degree","name","age"])

print(df.loc[0]["name"])
print(df["name"][0])

输出结果:

zhao
zhao

当然同时也可以修改一整列的值,注意为不存在的列赋值会生成新的一列。
赋值的元素数必须相等。

import pandas as pd

zidian={"name":["zhao","qian","sun","li"],
        "age":[21,22,23,24],
        "degree":["大专","本科","硕士","博士"]}

df=pd.DataFrame(zidian,columns=["degree","name","age"])

df["age"]=[10,11,12,13]

print(df)

df["other"]=[0,0,0,0]

print(df)

输出结果:

  degree  name  age
0     大专  zhao   10
1     本科  qian   11
2     硕士   sun   12
3     博士    li   13
  degree  name  age  other
0     大专  zhao   10      0
1     本科  qian   11      0
2     硕士   sun   12      0
3     博士    li   13      0

注意修改不能用先行后列的方式。

使用del语句可以删除列。

import pandas as pd

zidian={"name":["zhao","qian","sun","li"],
        "age":[21,22,23,24],
        "degree":["大专","本科","硕士","博士"]}

df=pd.DataFrame(zidian,columns=["degree","name","age"])

del df["age"]

print(df)

输出结果:

  degree  name
0     大专  zhao
1     本科  qian
2     硕士   sun
3     博士    li

遍历

使用iterrows()按行遍历

可以将每一行迭代为(index,series)对
也可以直接将(index,series)拆封
index是行索引,row是行数据。

import pandas as pd

zidian={"name":["zhao","qian","sun","li"],
        "age":[21,22,23,24],
        "degree":["大专","本科","硕士","博士"]}

df=pd.DataFrame(zidian,columns=["degree","name","age"])

#将每一行迭代为(index,series)对
for row in df.iterrows():
        print(row[0],row[1],sep=':\n')

#也可以直接将(index,series)拆封
for index, row in df.iterrows():
        print(index,row[0],row["age"])

print(df)

输出结果:

0:
degree      大专
name      zhao
age         21
Name: 0, dtype: object
1:
degree      本科
name      qian
age         22
Name: 1, dtype: object
2:
degree     硕士
name      sun
age        23
Name: 2, dtype: object
3:
degree    博士
name      li
age       24
Name: 3, dtype: object

#################分界线

0 大专 21
1 本科 22
2 硕士 23
3 博士 24
使用iterrows()按行遍历

将每一行迭代成元组,这种方法比iterrows效率高。
也可以在迭代时把其拆分,方便使用。
注意只能同过整数索引或者切片来获取,如果要使用row[“age”]则要使用gatattr()返回一个指向对象属性的值。

import pandas as pd

zidian={"name":["zhao","qian","sun","li"],
        "age":[21,22,23,24],
        "degree":["大专","本科","硕士","博士"]}

df=pd.DataFrame(zidian,columns=["degree","name","age"])

#将每一行迭代为元组
for row in df.itertuples():
        print(row)

#也可以直接将其拆封
for row in df.itertuples():
        print(row[0],row[1],row[2])

#使用getattr()
for row in df.itertuples():
        print(getattr(row,"name"),getattr(row,"age"))

输出结果:

Pandas(Index=0, degree='大专', name='zhao', age=21)
Pandas(Index=1, degree='本科', name='qian', age=22)
Pandas(Index=2, degree='硕士', name='sun', age=23)
Pandas(Index=3, degree='博士', name='li', age=24)

#########

0 大专 zhao
1 本科 qian
2 硕士 sun
3 博士 li

#########

zhao 21
qian 22
sun 23
li 24
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值