python数据分析:Pandas

🔗 Pandas 中文


pandas 基础

与 numpy 的区别

pandas 基于 numpy
两者侧重点不同

numpypandas
基础数据类型扩展数据类型
数值计算数据处理

数据结构与操作

pandas 的数据结构:

  • Series (一维)
  • DataFrame(二维)

数据结构的操作:

  • 基本操作
  • 运算操作
  • 特征类操作
  • 关联类操作
from pandas import pd
from pandas import Series, DateFrame

Series (一维)

Series:

  • 一组数据+索引
  • 带“标签”的数组
  • 基本操作类似 ndarray、字典

创建 Series

Series(data, index, name)
"""
data:[]、{}、标量、ndarray
index:自定义索引
name:Series的名字
"""


import pandas as pd


# data:[]
li = [2,4,6,8]
ss = pd.Series(li)
print(ss)
ss= pd.Series(li, index=['a','b','c','d'])
print(ss)


# data:{}
# 索引:字典的 key
d = {'a':2,'b':4, 'c':6, 'd':8}
ss = pd.Series(d) 
print(ss)
ss = pd.Series(d, index=['c','a',1,'g'])		# index:匹配 索引,若没有'c',则返回NaN
print(ss)
# c    6.0
# a    2.0
# 1    NaN
# g    NaN
ss = pd.Series(d, index=[0,1,2,3])
print(ss)
# 0   NaN
# 1   NaN
# 2   NaN
# 3   NaN


# data:标量
x = 100
ss = pd.Series(x)
print(ss)			# 0    100
ss = pd.Series(x, index=['a','b','c','d'])
print(ss)


# data:ndarray
import numpy as np

arr = np.random.random(5)
ss = pd.Series(arr)
print(ss)
ss = pd.Series(arr, index=np.arange(5,0,-1))
print(ss)

基本操作

索引:自动索引(位置索引)、自定义索引(标签索引)

import pandas as pd

li = [2,4,6,8]
ss= pd.Series(li, index=['a','b','c','d'])
print(ss)


# 属性
print(ss.index)
print(type(ss.index))
print(ss.values)
print(type(ss.values))		# <class 'numpy.ndarray'>
ss.name = 'my_series_name'
ss.index.name = 'my_index_name'
print(ss)


# 索引
# 位置索引(自动索引)
print(ss[0], ss[-1])
print(ss[[1,3]])	
# 标签索引(自定义索引)
print(ss['a'])
print(ss[['b','d']])
# 位置切片
print(ss[:2])
# 标签切片
print(ss[:'c'])			# 包括'c'
# 条件过滤
print(ss[ss>5])


# 添加
ss['e'] = 10        # 类似字典
ss[4] = 10			# 自动索引
print(ss)

ss2 = pd.Series([10,12], index=['e','f'])       # 标签可重复
ss = ss.append(ss2)
print(ss)
print(ss['e'])      # 多个


# 删除
ss = ss.drop(2)     # 自动索引(若没有自定义索引)
ss = ss.drop('b')
ss = ss.drop(['b','d'])     # 多个
print(ss)

ss.pop(2)           # 自动索引(若没有自定义索引)
ss.pop('b')          # 不能删除多个
print(ss)


# 修改
ss[0] = 100         # 自动索引
ss['b'] = 100       # 自定义索引
print(ss)

ss[:2] = 100        # 都是100
ss[:'c'] = 100
ss[:2] = [100, 200]     # 分别为100, 200
ss[['b', 'd']] = 100
print(ss)

DataFrame(多维)

DataFrame:

  • 二维 或多维
  • 各列的数据类型可不同,每一列都是一个Series
  • 行索引 index
    列索引 columns
  • 访问:pandas.DataFrame[列][行]numpy.ndarray[行][列]

创建 DataFrame

DataFrame(data, index, columns)
"""
data:[]、{}、ndarray
index:自定义 行索引
columns:自定义 列索引
"""
import numpy as np
import pandas as pd


# data:[]
li = [2,4,6,8]
df = pd.DataFrame(li)
print(df)
df = pd.DataFrame(li, index=['a1','a2','a3','a4'])
print(df)

li = [[2,4,6], [8,10,12]]
df = pd.DataFrame(li, index=['a1','a2'], columns=['b1','b2','b3'])
print(df)


# data:{}
# 列索引:字典的key    行索引:自动索引
d = {'b1': [1,2], 'b2': [3,4], 'b3':[5]}		# 缺失的用 NaN 填充
df = pd.DataFrame(d)
print(df)
df = pd.DataFrame(d, index=['a1','a2'], columns=['b1','b2','b3'])
"""
index:添加 自定义行索引
columns:匹配 列索引,若没有'b1',则返回NaN
"""
print(df)
df = pd.DataFrame(d, index=['a1','a2'], columns=['c1','c2','c3'])
print(df)


# data:ndarray
arr = np.random.randint(0,10,size=(2,3))
df = pd.DataFrame(arr, index=['a1','a2'], columns=['b1','b2','b3'])
print(df)

基本操作

属性、索引

import numpy as np
import pandas as pd


arr = np.random.randint(0,10,size=(2,3))
df = pd.DataFrame(arr, index=['a1','a2'], columns=['b1','b2','b3'])
print(df)


# 属性
print(df.index)
print(df.columns)
print(df.values)
print(df.dtypes)    # 每列的元素类型
print(df.size)      # 6
print(df.ndim)      # 2
print(df.shape)     # (2, 3)



# 索引
# 列:标签索引
print(df['b1'])     # 单列
print(df[:'b3'])      # 包括'b3'
print(df[['b1', 'b3']])
# 列:位置索引,没有columns
print(df[0])
print(df[:2])

# 行:标签索引
print(df.loc['a1'])
print(df.loc[:'a2'])    # 包括'a2'
# 行:位置索引,无论有没有index
print(df.iloc[0])
print(df.iloc[:1])      # 不包括行1

# 多行多列
print(df.loc['a1', :'b2'])		# 闭区间,loc(行标签,列标签)
print(df.iloc[1:, 0])			# 开区间,iloc(行位置,列位置),无论有无index、columns
print(df['b1'][0])            	# 没有index
print(df[:][:1])                # 没有index



# 部分查看
print(df.head())        # 前5行
print(df.head(1))       # 前1行
print(df.tail())        
print(df.tail(1))


# 条件过滤
d = {'b1':[1,2,3], 'b2':[4,5,6], 'b3':[7,8,9], 'b4':[10,11,12]}
df = pd.DataFrame(d, index=['a1','a2','a3'])
print(df)

print(df[df.b1==2])
print(df[(df.b1==2) & (df.b2==5)])
print(df[(df.b1==2) | (df.b1==3)])
print(df[df.b2>5])

print(df['b4'].str.contains('1'))		# 某列字符串是否包含'1'

插入

import numpy as np
import pandas as pd

d = {'b1':[1,2,3], 'b2':[4,5,6], 'b3':[7,8,9], 'b4':[10,11,12]}
df = pd.DataFrame(d, index=['a1','a2','a3'])
print(df)


# 列
# 尾插
df['b5'] = df['b1']*df['b2']
df['b5'] = [13,14,15]
df['b5'] = pd.Series(np.random.randint(0,10,size=3), index=['a1','a2','a3'])
df['b5'] = 100
print(df)

# 任意插
df.insert(int, column, value)
"""
int:插入的位置
column: 列标签
value:固定值、[]、Series
"""
df.insert(1,'b5', 100)
df.insert(1,'b5', [13,14,15])
print(df)



# 行
# 尾插
d = {'b1':13, 'b2':14, 'b3':15, 'b4':16}
df = df.append(d, ignore_index=True)
print(df)

## 任意插
df.loc[1] = [13,14,15,16]       # 插入位置:1
print(df)

删除

import numpy as np
import pandas as pd

d = {'b1':[1,2,3], 'b2':[4,5,6], 'b3':[7,8,9], 'b4':[10,11,12]}
df = pd.DataFrame(d, index=['a1','a2','a3'])
print(df)


# 列
df.drop(labels='b1', axis=1, inplace=True)      # inplace=True:改变原数据
df.drop(labels=['b1','b2'], axis=1, inplace=True)
print(df)

# 行
df.drop(labels='a1', axis=0, inplace=True)
df.drop(labels=['a1','a3'], axis=0, inplace=True)
print(df)

修改

import numpy as np
import pandas as pd

d = {'b1':[1,2,3], 'b2':[4,5,6], 'b3':[7,8,9], 'b4':[10,11,12]}
df = pd.DataFrame(d, index=['a1','a2','a3'])
print(df)

# 一行
df.loc['a3'] = [13,14,15,16]
print(df)

# 一列
df.loc[:,'b1'] = [13,14,15]
print(df)

# 某些
df.loc[df.b1>1, 'b2'] = 100
print(df)

统计:汇总、计算

数值型数据

用 numpy 的统计函数

import numpy as np
import pandas as pd

d = {'b1':[1,2,3], 'b2':[4,5,6], 'b3':[7,8,9], 'b4':[10,11,12]}
df = pd.DataFrame(d, index=['a1','a2','a3'])
print(df)


# 用 numpy
print(np.sum(df['b1']))


# 用pandas
print(df['b1'].sum())

print(df.describe())
print(df[['b1','b3']].describe())

pandas的统计函数:在这里插入图片描述

类别型数据

import numpy as np
import pandas as pd

d = {'id':[1,2,3,4],
     'name':['Amy', 'Jack', 'Bob', 'Mike'],
     'sex':['F','M','M','M'],
     'age':[20, 18, 24, 19]
     }
df = pd.DataFrame(d)
print(df)


# 频数
print(df['sex'].value_counts())

# 类型转换为 category
print(df['sex'].dtypes)     # object
df['sex'] = df['sex'].astype('category')
print(df['sex'].dtypes)     # category

# describe()
print(df['sex'].describe())     # 类别型数据的describe()需要先转换为category类型

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值