【python数据分析模块教程】2——pandas基础简介以及运用

本文详细介绍如何使用Pandas进行数据处理,包括数据表的生成、查看、清洗、预处理等操作,同时还涉及了数据提取、关联及聚合等内容。

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


1.生成数据表


1.1 Series 创建

  • 列表创建
s1=pd.Series([1,2,3,4])
  • 列表+列名创建
s2=pd.Series([1,2,3,4,],index=['a','b','c','d'])
s3 = pd.Series({'a':1,'b':2})

1.2 series 转换为 dataframe

  • 转换
s1.to_frame()
  • 转置转换
s2.to_frame().T

1.3 Dataframe创建

  • 多维列表创建
array = [[1,2,3],[3,4,5]]
df = pd.DataFrame(array)
  • 数组字典创建
dict = {'name':['datafrog','data','frog'],'age':[18,19,18]}
df = pd.DataFrame(dict)

1.4 导入文件(csv,xlsx)

df = pd.DataFrame(pd.read_csv('name.csv',header=1)) # 以第2行为表头
df = pd.DataFrame(pd.read_excel('name.xlsx'))
df = pd.read_csv('stocks.csv',header=0,skiprows=[1,2]) # 以第一行为表头,跳过2,3行
df = pd.read_csv('stocks.csv',keep_default_na=False) # 把nan填充的变为空值

1.5 连接SQL

import pandas as pd
import sqlalchemy

#需要执行的sql语句
sql='select * from stu'
#登录sql参数
engine = sqlalchemy.create_engine('mysql+pymysql://root:mysql@localhost:3306/data')
#读取sql
df = pd.read_sql(sql,engine)

# 新建一个dataframe
df1 = pd.DataFrame({'name':['zhangsan','wagnwu','zhaoliu'],
                  'age':[18,19,17]})
#将dataframe导入到sql中
df.to_sql('stu',engine,index=False,if_exists='append')

2. 数据表Dataframe的查看


2.1 获取行索引,列索引,行列索引

df.index
df.columns
df.axes

2.2 修改列索引,以某列作为行索引

df.columns=(['a','b','c'])
df.set_index('b')

2.3 查看表格整体情况,查看各列的类型,查看各项统计值

df.info() # (维度、列名称、数据格式、所占空间)
df.dtypes
df.describe()

2.4 查看前x行,查看后x行,查看行*列,查看有多少行多少列

df.head()
df.tail()
df.size
df.shape

2.5 查看某列有多少种值

df.age.uique()
chipo['item_name'].nunique()

2.6 查看某列各种值的个数

df.age.value_counts()

2.7 根据列进行排序

df.sort_values('name') #根据一列进行排序,默认升序
df.sort_values(['name','age'],ascending=[True,False]) #根据多列进行排序,前者升序,后者降序

2.8 查看最大值,最小值,求和,每列最值索引

df.max()
df.min()
df.sum()
df.idxmax()

2.9 累加求和

df.cumsum()

3.数据清洗

nun值填充

df.fillna(0)

4.数据预处理


修改列索引

# 方法一
df.columns=(['name','age','sex']) #如果多赋给了列或者少赋给会报错

#方法二
df.rename(columns={'姓名':'name', '年龄':'age', '性别':'sex'},inplace=True)
# 修改列索引,inplace=True表示直接对源数据进行修改

替换一个值

#将name列的zz全部替换为zzz
df.replace({'name':{'zz':'zzz'}})
#另一种写法
df.name.replace({'zz':'zzz'})

增加一列,删除一列,删除一行

df['height']=1 #增加了全等于1的一列
del df['height'] #删除height列
df.drop(labels=0)#删除行/列 labels是行列名称,默认axis=0删除行,1删除列

修改一列的多个值

df.sex=df.sex.map({'男':'male','女':'female'}) #把sex列的男改为male,女改为female

5.数据提取


iloc与loc区别

  • loc是基于索引的,左闭右闭
  • iloc是基于位置的,左闭右开

重新设置索引,将某一列设置为索引

df.reset_index()
df.set_index('用户ID')

设置日期为索引,提取某一天之前的所有行

df_inner=df_inner.set_index('date') 
df_inner[:'2013-01-04']

使用loc提取一行,提取多行

df.loc[2] #提取第二行
df.loc[[0,1,2]] # 提取第1,2,3,行
df.loc[0:3:2] #提取1-4行,步长为2

使用loc提取某一列的多行

df.loc[0:5,'年龄']

使用loc提取一个条件下的所有行

#方法一
b1=df['年龄']>30
df.loc[b1]
#方法二
df.loc[df['年龄']>18,:] # 冒号可以省略

使用iloc按位置区域提取多行多列

df.iloc[:3,:2] #冒号前后的数字不再是索引的标签名称,而是数据所在的位置,从0开始,前三行,前两列。

使用iloc按位置单独提起数据

df.iloc[[0,2,5],[4,5]] #提取第0、2、5行,4、5列

选取一列,选取多列

df['年龄'].head()
df[['年龄','城市']].head()
df.age

选取行和列

# 单行下的单列,一个单元格
df.loc[0,'年龄']
#多行多列
df.loc[0:3,['年龄','性别']]
#多行多列
df.iloc[0:3,0:2]

判断city列的值是否为北京

df[‘city’].isin([‘beijing’])

判断city列里是否包含beijing和shanghai,将符合条件的数据提取出来

df.loc[df_inner[‘city’].isin([‘beijing’,’shanghai’])]

提取前三个字符,并生成数据表

pd.DataFrame(category.str[:3])

6.数据关联

concat拼接

pd.concat([left,right]) #简单上下拼接,所有列名都会展出,空值填充NAN
pd.concat([left,right],ignore_index=True) #重置行索引 
pd.concat([left,right],axis=1 #左右拼接,所有行都展出)

merge拼接

result=pd.merge(left,right,on='key') #默认inner join,多出的key无法展示
result=pd.merge(left,right,on=['key1',‘key2’]) #多个关联
#左连接
result = pd.merge(left, right, how='left', on=['key1', 'key2'])
#右连接
result = pd.merge(left, right, how='right', on=['key1', 'key2'])
#外连接
result = pd.merge(left, right, how='outer', on=['key1', 'key2'])

#以上针对列名相同
#列名不同时用下面方法:
pd.merge(left,right,left_on = ['key1','key2'],right_on = ['key3','key4'])

#行索引不同的时候,通过索引来关联
#1.先改行索引
left.set_index('key1',inplace=True)
right.set_index('key3',inplace=True)
#2.左边也用行索引,右边也用行索引
pd.merge(left,right,left_index=True,right_index=True)

6.数据聚合

  • 主要函数是groupby和pivote_table

按照列分组

gb_dis=df.groupby('district')

按照区域进行计数

df.groupby('district').count()

按照区域进行计数并排序

df.groupby('district').count().sort_values('user_id')

按区域对userid进行计数

df.groupby('district')['user_id'].count()

按照城市,区域对userid进行计数

df.groupby(['city','district'])['user_id'].count()

按照区域分组后,对每个列都求均值,和

#写法1
gb_dis=df.groupby('district')
gb_dis.agg([np.mean,np.sum])
#写法2
df.groupby('district').agg([sum,np.mean])

按照区域分组后,针对具体的列进行聚合

df.groupby('district').age.agg([np.mean,np.sum,np.std])

按照区域分组后,不同列不同聚合函数

df.groupby('district').agg({"age":np.mean,"novip_buy_times":np.sum})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值