python学习笔记37:pandas

本文深入探讨了Pandas库在Python数据分析中的应用,包括Series和DataFrame的创建、索引、数据对齐、算术运算、数据排序、统计计算、层次化索引、读写等高级功能,以及通过实例演示了如何利用Pandas进行高效的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pandas

series:一维数据结构
dataframe:二维数据结构

import pandas as pd
Series方式

参数说明:

  • data
  • index 索引
  • name 名称
  • copy 是否复制
  • dtype 数据类型
ser_obj = pd.Series([1,2,3])
ser_obj
0    1
1    2
2    3
dtype: int64
# 指定索引
ser_obj = pd.Series([1,2,3],index=['a','b','c'])
ser_obj
a    1
b    2
c    3
dtype: int64
# 从字典创建
dit = {2001:100,2002:200,2003:150}
ser_obj1 = pd.Series(dit)
ser_obj1
2001    100
2002    200
2003    150
dtype: int64
Dataframe方式

参数说明:

  • data
  • index 索引
  • columns 行索引
  • copy 是否复制
  • dtype 数据类型
import numpy as np
data = np.arange(6).reshape(2,3)
df_obj = pd.DataFrame(data)
df_obj
012
0012
1345
data = np.arange(6).reshape(2,3)
df_obj = pd.DataFrame(data,columns=['a','b','c'])
df_obj
abc
0012
1345
# 增加一列
df_obj['d'] = [1,2]
df_obj
abcd
00121
13452
# 删除一列
del df_obj['a']
df_obj
bcd
0121
1452
# 重置索引
ser_obj1 = pd.Series([1,2,3,4],index=['c','b','a','d'])
ser_obj1
c    1
b    2
a    3
d    4
dtype: int64
# fill_value会让所有缺失值都用同一个值填充
ser_obj2 = ser_obj1.reindex(['a','b','c','d','e','f'],fill_value=5)
ser_obj2
a    3
b    2
c    1
d    4
e    5
f    5
dtype: int64
# ffill\pad 前向填充值
# bfill\backfill 后向填充值
# nearest 从最近的索引值填充
ser_obj3 = pd.Series([1,3,5,7], index=[0,2,4,6])
ser_obj3
0    1
2    3
4    5
6    7
dtype: int64
ser_obj3.reindex([1,2,3,4,5,6],method='bfill')
ser_obj3
0    1
2    3
4    5
6    7
dtype: int64
索引
arr = np.arange(12).reshape(3,4)
df_obj = pd.DataFrame(arr, columns=['a','b','c','d'])
df_obj
abcd
00123
14567
2891011
df_obj['a']
0    0
1    4
2    8
Name: a, dtype: int64
df_obj[0:1]
abcd
00123
# 多列,以列表方式传入
df_obj[['a','c']]
ac
002
146
2810
# loc和iloc
df_obj.loc[:,['c','a']]
ca
020
164
2108
df_obj.iloc[:,[2,0]]
ca
020
164
2108
算术运算和数据对齐
# 先对齐在运算
obj_one = pd.Series(range(10,13),index=range(3))
obj_one
0    10
1    11
2    12
dtype: int64
obj_two = pd.Series(range(10,16),index=range(6))
obj_two
0    10
1    11
2    12
3    13
4    14
5    15
dtype: int64
# 没有用NaN补充,也可以设置fill_value
obj_one + obj_two
0    20.0
1    22.0
2    24.0
3     NaN
4     NaN
5     NaN
dtype: float64
obj_one.add(obj_two,fill_value=0)
0    20.0
1    22.0
2    24.0
3    13.0
4    14.0
5    15.0
dtype: float64
数据排序
# 按索引
ser_obj = pd.Series(range(10,13),index=range(3))
ser_obj
0    10
1    11
2    12
dtype: int64
ser_obj.sort_index(ascending=False)
2    12
1    11
0    10
dtype: int64

参数说明:

  • axis 0 行1列
  • level 指定索引级别排序
  • ascending 默认升
  • inplace 默认False,不创建新的实例
  • kind 排序算法,如quicksort
# 按值
ser_obj = pd.DataFrame(np.arange(12).reshape(3,4))
ser_obj
0123
00123
14567
2891011
ser_obj[4] = [12,3,2]
ser_obj
01234
0012312
145673
28910112
ser_obj.sort_values(by=4)
01234
28910112
145673
0012312
常用统计计算
  • sum 和
  • mean 均值
  • medium 中值
  • idxmax 最大值索引
  • idxmin
  • count 非NaN的值的个数
  • var 样本方差值
  • std 标准差
  • cumsum 累计求合
  • cumprod 累计求积
  • describe 列计算汇总统计
层次化索引
df_obj = pd.DataFrame({'学生数':[1,2,3,4]},
                     index=[['学校1','学校1','学校2','学校2'],['班级1','班级2','班级1','班级2']])
df_obj
学生数
学校1班级11
班级22
学校2班级13
班级24
from pandas import MultiIndex
# 三种转化为层次索引的方法
# MultiIndex.from_arrays
# MultiIndex.from_product
# MultiIndex.from_tuples
# 方式1
list_tuple = [('学校1','班级1'),('学校1','班级2'),('学校2','班级1'),('学校2','班级2')]
m_index = MultiIndex.from_tuples(tuples=list_tuple)
m_index
MultiIndex(levels=[['学校1', '学校2'], ['班级1', '班级2']],
           codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
df_obj = pd.DataFrame({'学生数':[1,2,3,4]},
                     index = m_index)
df_obj
学生数
学校1班级11
班级22
学校2班级13
班级24
# 方式2
schools = ['学校1', '学校2']
classes = ['班级1', '班级2']
m_index = MultiIndex.from_product(iterables=[schools,classes])#,names=['school','class'])
df_obj = pd.DataFrame({'学生数':[1,2,3,4]},
                     index = m_index)
df_obj
学生数
学校1班级11
班级22
学校2班级13
班级24
层次索引操作
# df_obj['学校1']

读写

  • pd.read_csv() 默认使用“,”做分割符号
  • pd.to_csv()
  • pd.read_table() 默认使用“\t”做分割符号
  • pd.read_excel()
# 由于表格有多个列标题,所以用header=[0,1]表示前两行都是列标签
df_obj = pd.read_excel('scores.xlsx',header=[0,1],index_col=0)
df_obj
年份一本分数线二本分数线
文科理科文科理科
2018576532488432
2017555537468439
2016583548532494
2015579548527495
2014565543507495
2013549550494505
2012495477446433
2011524484481435
2010524494474441
2009532501489459
2008515502472455
2007528531486478
2006516528476476
# 获取历年文理科最高和最低分数线及极差
df_obj.max()
年份       
一本分数线  文科    583
       理科    550
二本分数线  文科    532
       理科    505
dtype: int64
df_obj.min()
年份       
一本分数线  文科    495
       理科    477
二本分数线  文科    446
       理科    432
dtype: int64
df_obj["一本分数线","文科"].ptp()
/Users/zxx/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:1: FutureWarning: Method .ptp is deprecated and will be removed in a future version. Use numpy.ptp instead.
  """Entry point for launching an IPython kernel.





88
df_obj.describe()
年份一本分数线二本分数线
文科理科文科理科
count13.00000013.00000013.00000013.000000
mean541.615385521.153846487.692308464.384615
std28.15001025.98668323.57040727.274953
min495.000000477.000000446.000000432.000000
25%524.000000501.000000474.000000439.000000
50%532.000000531.000000486.000000459.000000
75%565.000000543.000000494.000000494.000000
max583.000000550.000000532.000000505.000000

转载于:https://www.cnblogs.com/zheng1076/p/11453525.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值