03.pandas

Pandas

Python Data Analysis Library 或 pandas 是基于NumPy的一种工具,为了解决数据分析任务而创建的。同时纳入了大量库和一些标准的数据模型,高效地操作大型数据集所需的工具。

Pandas基本数据结构

Series

一维数组,与Numpy中的一维array类似。二者与Python剧本的数据结构List相近。
Series能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。

DataFrame

二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容易。

Pandas库的series类型

默认情况下,Series的下标都是数字(可以使用额外参数指定),类型是统一的

s = pd.Series([1, 3, 5, np.nan, 6, 8]) #一维Series可以用一维列表初始化
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=[‘a’,‘b’,‘c’,‘d’,‘e’,‘f’])
print(s)

索引-数据的行标签

s.index # RangeIndex(start=0, stop=6, step=1)

s.values # [ 1. 3. 5. nan 6. 8.]

切片操作

同numpy

索引赋值

s.index.name = '索引'
s.index=list('abcdef')
s[‘a’:‘c’] # 左闭右闭

Pandas库的DataFrame类型

date = pd.data_range(‘20250519’,periods=6)
print(date)
df = pd.DataFrame(np.random.randn(6,4), index=date,columns=list(‘ABCD’))

使用字典传入数据

查看数据

df.head() # 不输入默认为前5行
df.tail()
df.dtypes # 各个数据的类型
df.index
df.columns
df.values

pandas读取数据及数据操作

df = pd.read_excel(‘filename.xlsx’)
df,head()

行操作

df.iloc[0]
df.iloc[0:5] # 类似df.head()
df.loc[0:4]

添加一行

dit = {…}
s = pdf.Series(dit)
df = df._append(s)

删除一行

df = df.drop([38738])
print(df.tail())

列操作

df.columns

增加一列

df[‘序号’] = range(1, len(df) + 1)

删除一列

df = df.drop(‘序号’, axis=1)

通过标签选择数据

df.loc[[index],[column]]

条件选择

df[df[‘产地’] == ‘中国’][:5]

缺失值及异常值处理

在这里插入图片描述

填充缺失值

df['评分'].fillna(np.mean(df['评分']),inplace=True)

删除缺失值

在这里插入图片描述

数据保存

df.to_excel('movie_data.xlsx')

数据格式查看与转换

df[‘投票人数’].dtype
df[‘投票人数’] = df[‘投票人数’].astype(‘int’)

排序

默认排序

df.sort_values(by='投票人数', ascending=False)[:5]

多个值排序

df.sort_values(by=['评分','投票人数'], ascending=False)[:5]

基本统计分析

dataframe.describe():对dataframe中的数值型数据进行描述性统计
df[['投票人数','评分']].corr()相关系数
df[['投票人数','评分']].cov()协方差
var方差
unique()去重
replace(_src, _dst, [inplace=True])替换
replace([_src], [_dst], [inplace=True])替换
value_counts() 每个值 每个值出现的次数默认从大到小

数据透视

快速地对数据进行强大的分析。

pd.set_option('display:max_columns',100)
pd-.set_option('display:max_rows',500)

多个索引

pd.pivot_table(df, index=['年代','产地'])

指定列

pd.pivot_table(df, index=['年代','产地'],values=['评分'])

指定函数统计不同的统计值

pd.pivot_table(df, index=['年代','产地'],values=['投票人数'],aggfunc=np.sum)
pd.pivot_table(df, index=['产地'],values=['投票人数','评分'],aggfunc=[np.sum,np.mean])
pd.pivot_table(df, index=['产地'],aggfunc=[np.sum,np.mean],fill_value=0) 填充NaN为0
pd.pivot_table(df, index=['产地'],aggfunc=[np.sum,np.mean],fill_value=0,margins=True) 最后一行添加总和结果

不同值执行不同函数

pd.pivot_table(df, index=['产地'],values=['投票人数','评分'],aggfunc={'投票人数':np.sum,'评分':np.mean},fill_value=0)

数据重塑和轴向旋转

Series的层次化索引

s = pd.Series(np.arange(1, 10), index=[['a','a','a','b','b','c','c','d','d'],[1,2,3,1,2,3,1,2,3]])
print(s.index)

Series与Dataframe转化

在这里插入图片描述

Dataframe的层次化索引

data =  pd.DataFrame(np.arange(12).reshape(4,3),index=[['a','a','b','b'],[1,2,1,2]],columns=[['A','A','B'],['Z','X','C']])
print(data)
data['A']
data.index.names = ['row1','row2']
data.columns.names = ['col1','col2']
data.swaplevel('row1','row2') # 交换

产地和年代同时设成索引,产地是外层索引,年代为内层索引
set_index可以把列变为索引
reset_index是把索引变成列

df=df.set_index(['产地','年代'])
print(df)

取消层次化索引

df=df.reset_index()

数据旋转

.T可以直接旋转行列

数据分组,分组运算

GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表。
在这里插入图片描述

# 按照电影的产地进行分组
group = df.groupby(df['产地'])
print(group.mean())
print(group.sum())
# 计算每年的平均评分
df['评分'].groupby(df['年代']).mean()
df['年代'] = df['年代'].astype('str')# 保证下面不会对年份进行运算
df.groupby(df['产地']).sum()

df.groupby([df['产地'],df['年代']]).mean()

离散化处理

实际中,对有的数据属性,往往并不关心数据的绝对取值,只关心它所处的区间或者等级。
离散化也可称为分组、区间化。
pd.cut(x, bins, right=True, labels=None,retbins=False,precision=3,include_lowest=False)
x:需要离散化的数组、Series、DataFrame
bins: 分组的依据

# (]区间
df['评分等级']=pd.cut(df['评分'],[0,3,5,7,9,10],labels=['E','D','C','B','A'])
bins = np.percentile(df['投票人数'],[0,20,40,60,80,100])
df['热门程度'] = pd.cut(df['投票人数'],bins,labels=['E','D','C','B','A'])

合并数据集

append 先把数据集拆分为多个,再进行合并

df_usa = df[df.产地=='美国']
df_china = df[df.产地=='中国大陆']
df_china.append(df_usa)

merge pd.merge(df1, df2, how=‘inner’, on=‘名字’)
concat 将多个数据集进行批量合并
df1 = df[:10]
df2 = df[100:110]
df3 = df[200:210]
dff = pd.concat([df1, df2 ,df3], axis=0)

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾海、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值