Pandas库

Pandas库

Pandas 一个强大的分析结构化数据的工具集,基础是Numpy(提供高性能的矩阵运算)。

数据结构

一维数据:Series

pd.Series(data,index,dtype,name,copy)

  • data:一组数据(ndarray 类型)。
  • index:数据索引标签,如果不指定,默认从 0 开始
  • dtype:数据类型,默认会自己判断。
  • name:设置名称。
  • copy:拷贝数据,默认为 False。

Series 是一种类似于一维数组的对象,相当于表格中的一列,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。

不指定index

结果全部输出

import pandas as pd
a = [1,2,3]
a = pd.Series(a)
print(a)
# 输出结果:
0    1
1    2
2    3
dtype: int64
指定index

索引结果输出index部分

import pandas as pd
a = ["a","b","c"]
b= pd.Series(a,index=["x","y","z"])
print(b)
# 输出结果:
x    a
y    b
z    c
dtype: object
字典形式

结果是key+value,有index时只输出一部分

import pandas as pd
dict1 = {
	1:"Google", 2:"baidu", 3:"360"
}
c = pd.Series(dict1,name='SSS')#设置名称参数
print(c)
# 字典的 key变成了索引值
# 可以指定需要数据的索引输出
d = pd.Series(dict1,index=[1,2],name='AAA')
print(d)
输出结果:
1    Google
2     baidu
3       360
Name: SSS, dtype: object
1    Google
2     baidu
Name: AAA, dtype: object

二维数据Dateframe

pd.DataFrame( data, index, columns, dtype, copy)

  • data:一组数据(ndarray、series, map, lists, dict 等类型)。
  • index:索引值,或者可以称为行标签。
  • columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
  • dtype:数据类型。
  • copy:拷贝数据,默认为 False。

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。

使用ndarrays创建
import pandas as pd
data1 = {
	'sites': ['Google','Runoob','Wiki'],
	'number' : [1,2,3]
}
a = pd.DataFrame(data1)
print(a)
# 输出结果:
    sites  number
0  Google       1
1  Runoob       2
2    Wiki       3
使用列表创建
data2 = [
	['Google',10],
	['Baidu',20],
	['360',30]
]
b = pd.DataFrame(data2,columns=['Site','Age'],dtype=float)
print(b)
# 输出结果:
     Site   Age
0  Google  10.0
1   Baidu  20.0
2     360  30.0
使用字典创建
data3 = [
	{
		'a':1,
		'b':2
	},
	{
		'a':3,
		'b':4,
		'c':5
	}
]
c = pd.DataFrame(data3)
print(c)
# 输出结果(没有对应的部分数据为 NaN):
   a  b    c
0  1  2  NaN
1  3  4  5.0
指定index
data4 = {
  "calories": [420, 380, 390],
  "duration": [50, 40, 45]
}
d = pd.DataFrame(data4, index = ["day1", "day2", "day3"])
print(d)
# 输出结果:
      calories  duration
day1       420        50
day2       380        40
day3       390        45
从另一个DataFrame对象创建

即增加列或改变列的数据

import pandas as pd
e = pd.DataFrame(
    data = [
        [60, 78, 92, 85],
        [70, 68, 95, 76],
        [88, 98, 83, 87]
    ],
    index = ['小明', '小红', '小强', ],
    columns = ['语文', '数学', '英语', '化学'],
    dtype = float,
    copy = False
)
f = pd.DataFrame(e, copy = False)#浅拷贝
print(f)
f['语文'] = [0, 0, 0]
print(f)
#输出结果:
      语文    数学    英语    化学
小明  60.0  78.0  92.0  85.0
小红  70.0  68.0  95.0  76.0
小强  88.0  98.0  83.0  87.0
    语文    数学    英语    化学
小明   0  78.0  92.0  85.0
小红   0  68.0  95.0  76.0
小强   0  98.0  83.0  87.0
删除列

使用, axis = 0表示对行操作, axis = 1表示针对列的操作, inplace为True, 则直接在源数据上进行修改, 否则源数据会保持原样

dataFrame.drop('化学', axis = 1, inplace = True)

使用loc属性返回指定行的数据

data1.loc[index]

返回第一行:

print(data1.loc[0])

返回多行:

print(data1.loc[[0,2]])#第一和第三行

指定indx:

data1 = pd.DataFrame(data, index = ["day1", "day2", "day3"])
print(df.loc["day2"])#即返回day2对应的行

一维数据:

sites = {
	1:"Google", 2:"baidu", 3:"360"
}
a = pd.Series(sites)
print(a)
print(a.loc[2])#返回baidu

存储

  • .to_csv(路径):保存为.csv文件

  • .to_excel(路径):保存为.xlsx文件

提取数据

从文件读取

  • read_csv(filepath_or_buffer = 文件路径, delimiter = 分隔符, header = 是否第一行为列标题, engine = 引擎, encoding = 编码):读取.csv文件创建DataFrame对象
import pandas as pd
dataFrame = pd.read_csv('../数据/test.csv')
print(dataFrame)
  • read_excel(路径, header = 指定哪一行为标题, names = 指定列标题):读取.xlsx文件创建DataFrame对象
import pandas as pd
dataFrame = pd.read_excel(
    '../数据/test.XLSX',
    header = None
)
print(dataFrame)

DataFrame 查看数据

  • .head(n = 5):查看数据前n行
  • .tail(n = 5):查看数据后n行
  • .info():查看数据信息
  • .describe():查看数据统计信息

DataFrame 操作

纵向叠加

  • concat(dataFrame列表):将这些dataFrame的数据纵向叠加

    import pandas as pd
    
    dataFrame1 = pd.DataFrame(
        data=[
            ['一级', '读书', 21, 176],
            ['二级', '游泳', 22, 178],
            ['三级', '游泳', 21, 185],
            ['二级', '游泳', 19, 182],
        ],
        columns=['等级', '爱好', '年龄', '身高'],
        index = ['小明', '小红', '小强', '小于']
    )
    r = pd.concat([dataFrame1, dataFrame1])
    print(r)
    #输出结果:
        等级  爱好  年龄   身高
    小明  一级  读书  21  176
    小红  二级  游泳  22  178
    小强  三级  游泳  21  185
    小于  二级  游泳  19  182
    小明  一级  读书  21  176
    小红  二级  游泳  22  178
    小强  三级  游泳  21  185
    小于  二级  游泳  19  182
    

横向合并

  • merge(left = 左表, right = 右表, left_index, right_index, how = 连接方式( inner, left, right, outer)):按照指定连接方式将两个表合并
import pandas as pd

dataFrame1 = pd.DataFrame(
    data=[
        ['一级', '读书', 21, 176],
        ['二级', '游泳', 22, 178],
        ['三级', '游泳', 21, 185],
        ['二级', '游泳', 19, 182],
    ],
    columns=['等级', '爱好', '年龄', '身高'],
    index=['小明', '小红', '小强', '小于']
)
print(dataFrame1)
dataFrame2 = pd.DataFrame(
    data=[
        ['学士', 'O'],
        ['学士', 'A'],
        ['博士', 'A'],
        ['院士', 'B'],
    ],
    columns=['学位', '血型'],
    index=['小明', '小红', '小强', '小于']
)
print(dataFrame2)
r = pd.merge(
    left=dataFrame1,
    right=dataFrame2,
    left_index=True,
    right_index=True,
    how='inner'
)
print(r)
#输出结果:
等级  爱好  年龄   身高
小明  一级  读书  21  176
小红  二级  游泳  22  178
小强  三级  游泳  21  185
小于  二级  游泳  19  182
    学位 血型
小明  学士  O
小红  学士  A
小强  博士  A
小于  院士  B
    等级  爱好  年龄   身高  学位 血型
小明  一级  读书  21  176  学士  O
小红  二级  游泳  22  178  学士  A
小强  三级  游泳  21  185  博士  A
小于  二级  游泳  19  182  院士  B

空值处理

  • .dropna(subset = 列名):指定当某列出现空值才删除,没有subset时,只要一行中任意一个字段为空,就会被删除
  • .isnull():返回布尔DataFrame对象(是否是空值)
删除空值
import pandas

dataFrame = pandas.DataFrame(
    data=[
        ['一级', None, 21, 176],
        ['二级', '游泳', None, 178],
        ['三级', '游泳', 21, 185],
        [None, '游泳', 19, None],
    ],
    columns=['等级', '爱好', '年龄', '身高'],
    index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
print(dataFrame.dropna())
#输出结果:
      等级    爱好    年龄     身高
小明    一级  None  21.0  176.0
小红    二级    游泳   NaN  178.0
小强    三级    游泳  21.0  185.0
小于  None    游泳  19.0    NaN
    等级  爱好    年龄     身高
小强  三级  游泳  21.0  185.0
判断空值
import pandas as pd
dataFrame = pd.DataFrame(
    data=[
        ['一级', None, 21, 176],
        ['二级', '游泳', None, 178],
        ['三级', '游泳', 21, 185],
        [None, '游泳', 19, None],
    ],
    columns=['等级', '爱好', '年龄', '身高'],
    index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
print(dataFrame.isnull())
print(dataFrame['等级'].isnull())
#输出结果:
      等级    爱好    年龄     身高
小明    一级  None  21.0  176.0
小红    二级    游泳   NaN  178.0
小强    三级    游泳  21.0  185.0
小于  None    游泳  19.0    NaN
       等级     爱好     年龄     身高
小明  False   True  False  False
小红  False  False   True  False
小强  False  False  False  False
小于   True  False  False   True
小明    False
小红    False
小强    False
小于     True
Name: 等级, dtype: bool
计算空值个数
import pandas as pd

dataFrame = pd.DataFrame(
    data=[
        ['一级', None, 21, 176],
        ['二级', '游泳', None, 178],
        ['三级', '游泳', 21, 185],
        [None, '游泳', 19, None],
    ],
    columns=['等级', '爱好', '年龄', '身高'],
    index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
print(dataFrame.isnull().sum())
#输出结果:
      等级    爱好    年龄     身高
小明    一级  None  21.0  176.0
小红    二级    游泳   NaN  178.0
小强    三级    游泳  21.0  185.0
小于  None    游泳  19.0    NaN
等级    1
爱好    1
年龄    1
身高    1
dtype: int64
填充空值
import pandas as pd
dataFrame = pd.DataFrame(
    data=[
        ['一级', None, 21, 176],
        ['二级', '游泳', None, 178],
        ['三级', '游泳', 21, 185],
        [None, '游泳', 19, None],
    ],
    columns=['等级', '爱好', '年龄', '身高'],
    index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
dataFrame['年龄'] = dataFrame['年龄'].fillna(20)
print(dataFrame)
#输出结果:
小明    一级  None  21.0  176.0
小红    二级    游泳   NaN  178.0
小强    三级    游泳  21.0  185.0
小于  None    游泳  19.0    NaN
      等级    爱好    年龄     身高
小明    一级  None  21.0  176.0
小红    二级    游泳  20.0  178.0
小强    三级    游泳  21.0  185.0
小于  None    游泳  19.0    NaN
去重

.dropduplicates(subset = 列名列表, keep = ‘first’ 或 ‘last’):删除完全重复行, 可指定某字段重复时删除, 默认保留第一个, 后面重复的会删掉

import pandas as pd

dataFrame = pd.DataFrame(
    data=[
        ['一级', None, 21, 176],
        ['二级', '游泳', None, 178],
        ['三级', '游泳', 21, 185],
        [None, '游泳', 19, None],
    ],
    columns=['等级', '爱好', '年龄', '身高'],
    index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
print(dataFrame.drop_duplicates(subset = ['爱好'], keep = 'first'))
#输出结果:
      等级    爱好    年龄     身高
小明    一级  None  21.0  176.0
小红    二级    游泳   NaN  178.0
小强    三级    游泳  21.0  185.0
小于  None    游泳  19.0    NaN
    等级    爱好    年龄     身高
小明  一级  None  21.0  176.0
小红  二级    游泳   NaN  178.0
排序

.sort_values(by = 列名, ascending = 是否升序):对某列排序

import pandas as pd

dataFrame = pd.DataFrame(
    data=[
        ['一级', None, 21, 176],
        ['二级', '游泳', None, 178],
        ['三级', '游泳', 21, 185],
        [None, '游泳', 19, None],
    ],
    columns=['等级', '爱好', '年龄', '身高'],
    index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
dataFrame = dataFrame.sort_values(by = '等级', ascending = True)
print(dataFrame)
#输出结果:
      等级    爱好    年龄     身高
小明    一级  None  21.0  176.0
小红    二级    游泳   NaN  178.0
小强    三级    游泳  21.0  185.0
小于  None    游泳  19.0    NaN
      等级    爱好    年龄     身高
小明    一级  None  21.0  176.0
小强    三级    游泳  21.0  185.0
小红    二级    游泳   NaN  178.0
小于  None    游泳  19.0    NaN
分组

分组就是把指定的一列的值相同的分为一组, 调用一些函数对这些指定列值相同数据进行操作

.groupby(‘列名’):对指定列分组, 就是把该列值一样的分成一组

import pandas as pd

dataFrame = pd.DataFrame(
    data=[
        ['一级', '读书', 21, 176],
        ['二级', '游泳', 20, 178],
        ['三级', '游泳', 21, 185],
        ['四级', '游泳', 19, 177],
    ],
    columns=['等级', '爱好', '年龄', '身高'],
    index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
groupData = dataFrame.groupby('年龄')
分段

cut(x = 切分数据, bins = 切分方式, right = 是否包含右区间, labels = 分割后每段的名字列表):对一个数组进行分段

import pandas as pd
dataFrame = pd.DataFrame(
    data=[
        ['一级', '读书', 21, 176],
        ['二级', '游泳', 20, 178],
        ['三级', '游泳', 21, 185],
        ['四级', '游泳', 19, 177],
        ['四级', '读书', 19, 165],
        ['四级', '读书', 19, 190],
    ],
    columns=['等级', '爱好', '年龄', '身高'],
    index=['小明', '小红', '小强', '小于', '小兰', '小智']
)
r = pd.cut(x = dataFrame['身高'], bins = [160, 170, 180, 190, 200], right = False, labels = ['中等身高', '身高较高', '身高很高', '身高太高'])
print(r, end = '\n')
r = pd.cut(x=dataFrame['身高'], bins = 4, right=False, labels=['中等身高', '身高较高', '身高很高', '身高太高'])
print(r)
#输出结果:
小明    身高较高
小红    身高较高
小强    身高很高
小于    身高较高
小兰    中等身高
小智    身高太高
Name: 身高, dtype: category
Categories (4, object): ['中等身高' < '身高较高' < '身高很高' < '身高太高']
小明    身高较高
小红    身高很高
小强    身高太高
小于    身高较高
小兰    中等身高
小智    身高太高
Name: 身高, dtype: category
Categories (4, object): ['中等身高' < '身高较高' < '身高很高' < '身高太高']

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值