当前位置: 首页 > 工具软件 > PANDA > 使用案例 >

Pandas模块简介及使用

姬自强
2023-12-01

pandas的诞生

2008年,Wes Mckinney 开始开发一个用于分析金融数据的工具库,于2009年开源。仅此于scikit-learn之后,深受开发者的宠爱。
Pandas的Github地址

pandas的简介

Pandas是当前最流行、最常用的数据分析工具。当处理表格数据(比如存储在电子表格或数据库中的数据)时,pandas是最适合您的工具。它将帮助您探索、清理和处理您的数据。数据表被称为DataFrame,panda支持与多种文件格式或数据源的集成(csv、excel、sql、json、parquet…)。从每个数据源导入数据是由前缀为read *的函数提供的。类似地,to_*方法用于存储数据……选择或过滤特定的行和或列?过滤条件下的数据?在pandas中可以使用切片、选择和提取所需数据的方法。它是基于numpy,且集成了matplotlib模块。

  • 全面支持数据分析项目的研发步骤 ( 获取->清洗 -> 处理并计算 -> 视图分析 );
  • 提供获取、存储数据功能 ( csv、json、excel… );
  • 清洗数据及扩充数据类型;
  • 对数据进行过滤、选择;
  • 聚合计算 ( max、min、mean… );
  • 可视化图表。

开始撸起袖子敲代码拉~

Series

# 导入模块
import pandas as pd
from pandas import Series
# 1、一维数组
sel = Series(data=[1,2,3,4], index=['a','b','c','d'])
result= list(sel.iteritems()) 

""" Result:
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
"""

Series:一维数组,可通过index创建索引。

# 2、传入字典
dict = {"rad" : 100,'ji':200,'sad':900,'koo':800}
sel1 = Series(data=dict)

""" Result:
rad    100
ji     200
sad    900
koo    800
dtype: int64
"""

Series:传入字典,直接将转化键为索引。

# 3、重新设定索引
new_sel= sel.reindex(['b','a','c','d','e'])

""" Result:
b    2.0
a    1.0
c    3.0
d    4.0
e    NaN
dtype: float64
"""

Series:reindex重新索引,会返回一个新的Series(调用reindex将会重新排序,缺失值用NaN填补)。
注:此时的Seriesint类型经reindex后转化成了float64类型,原因:NaN的类型是float64

# 4、删除数据
sel2 = pd.Series(range(4,10))
data = sel2.drop([2,3])

""" Result:
0    4
1    5
4    8
5    9
dtype: int64
"""

Series:drop(索引)删除数据 返回删除后的数据。
注:Series 中的索引与列表的索引使用方法相同。

# 5、计算
sel3 = pd.Series(data=[12,23,14,15],index=['Aree','Rree','Miie','Kiie'])
sel4 = pd.Series(data=[11,13,24,25],index=['Oree','Rree','Aiie','Diie'])

"""	Result:
Aiie     NaN
Aree     NaN
Diie     NaN
Kiie     NaN
Miie     NaN
Oree     NaN
Rree    10.0
dtype: float64
"""

Series:根据索引来计算 相同可计算,不同则为NaN

# 6、过滤筛选
sel5 = pd.Series(data=[1,2,6,4],index=list('abcd'))
re = sel5[sel5>3]

"""Result:
c    6
d    4
dtype: int64
"""

[条件]:返回过滤后的值

DataFrame

随机构建

from pandas import DataFrame
import numpy as np

df1 = DataFrame(np.random.randint(0,10,(5,6)))	# 随机选择0-10之间的数,(5,6)->(行,列)
"""Result:
	   0  1  2
	0  6  3  3
	1  0  4  1
	2  1  8  1
"""

传入字典

data = {
    'Name' : pd.Series(['zs','ls','we'], index=list('abc')),
    'Age' : pd.Series(['10','20','30','40'], index=list('abcd')),
    'Country' : pd.Series(['中国','日本','韩国'], index=list('abc'))
}
df2 = DataFrame(data) 	# 若该列无索引,则会填充NaN
# 将df2转化成字典
new_ditc = df2.to_dict()

""" Result:
df2	  Name Age Country
	a   zs  10      中国
	b   ls  20      日本
	c   we  30      韩国
	d  NaN  40     NaN

new_dict = {'Name': {'a': 'zs', 'b': 'ls', 'c': 'we', 'd': nan}, 'Age': {'a': '10', 'b': '20', 'c': '30', 'd': '40'}, 'Country': {'a': '中国', 'b': '日本', 'c': '韩国', 'd': nan}}
"""

属性

data2 = {
    'Name' : ['J','I','A'],
    'Age' : ['18','13','20'],
    'Country' : ['ua','us','io']
}
df3 = pd.DataFrame(data=data2,index=['1','2','3'])

# 1、获取行数和列数
shape = df3.shape           # 
"""Result:(3, 3)"""

# 2、获取列 - columns索引
df3.index.tolist()
"""Result:
['1', '2', '3']
而index返回的是:Index(['1', '2', '3'], dtype='object')
"""

# 3、values 键值
values = df3.values
"""Result:返回所有值
[['J' '18' 'ua']
 ['I' '13' 'us']
 ['A' '20' 'io']]
"""
# 4、info 返回改数组的信息
info = df3.info()
"""Result:
	<class 'pandas.core.frame.DataFrame'>
	Index: 3 entries, 1 to 3
	Data columns (total 3 columns):
	 #   Column   Non-Null Count  Dtype 
	---  ------   --------------  ----- 
	 0   Name     3 non-null      object
	 1   Age      3 non-null      object
	 2   Country  3 non-null      object
	dtypes: object(3)
	memory usage: 96.0+ bytes
	None
"""
# 5、head(可指定行数) 显示头行
head = df3.head(3)

# 6、tail(行数)  显示后几行
tail = df3.tail()

# 7、获取列   type 返回 Series  获取多列返回 DataFrame [['name','age]]
name = df3['Name']
"""Result:
	1    J
	2    I
	3    A
	Name: Name, dtype: object
"""

# 8、Dataframe修改成index、columns
df4 = pd.DataFrame(np.arange(9).reshape(3,3),index=['bj','sh','gz'],columns=['a','b','c'])
index_4 = df4.index        # Index(['bj', 'sh', 'gz'], dtype='object')   可被赋值
df4.index = ['beijing','shanghai','guangzhou']      # 对index进行赋值
"""Result:
           a  b  c
beijing    0  1  2
shanghai   3  4  5
guangzhou  6  7  8
"""

# 9、重新命名行和列的俩种方法
def test_map(x):
    """
    :param x: 是原有的行列值
    :return:
    """
    return x+'_new'
rename = df4.rename(index=test_map, columns=test_map)       # 将行和列都进行修改
rename_1 = df4.rename(index={'bj':'beijing'},columns={'a':'A'})     # 直接用字典重新赋值
"""
rename =         a_new  b_new  c_new
		bj_new      0      1      2
		sh_new      3      4      5
		gz_new      6      7      8
rename_1 =           A  b  c
			beijing  0  1  2
			sh       3  4  5
			gz       6  7  8
"""
# 10、set_index()的使用:将一组数据作为索引
df5 = pd.DataFrame({'X':range(5),'Y':range(5),'S':list('abcde'),'Z':[1,1,2,2,2]})
result = df5.set_index('S', drop=False)     # drop 默认为True将该列的值删除
"""Result:drop=False
		   X  Y  S  Z
		S            
		a  0  0  a  1
		b  1  1  b  1
		c  2  2  c  2
		d  3  3  d  2
		e  4  4  e  2
drop=True
		   X  Y  Z
		S         
		a  0  0  1
		b  1  1  1
		c  2  2  2
		d  3  3  2
		e  4  4  2
"""
 类似资料: