python第三章 02-04pandas总结

本文围绕Pandas展开,介绍了DataFrame的创建、与Series的区别及常用属性,如索引获取和iloc、loc区别。还阐述了Pandas读写文件的方法,以及与SQL的关联操作,包括数据拼接、关联、分组计算等。最后讲解了Pandas连接MySQL数据库和写入数据的相关内容。

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

1.DataFrame 的创建

1.多维列表创建

2.数组字典创建

1.多维列表创建
import pandas as pd
array = [[1,2,3],[3,4,5]]
df = pd.DataFrame(array)
df
type(df)
#pandas.core.frame.DataFrame

2.数组字典创建

dict = {'name':['datafrog','data','frog'],'age':[18,19,18]}
df = pd.DataFrame(dict)
df

图片

2.DataFrame 和 Series 的介绍

(1).series是一维数组变量(只有1列索引+1列的值)

图片

图片

s1 = pd.Series([1,2,3,4])
print(type(s1))
<class 'pandas.core.series.Series'>

图片

(2).将series转为dataframe:s1.to_frame()

图片

3.DataFrame 的常用属性

图片

1.索引

1.1获取行索引【.index】、列索引【.colums】、行列索引【.axes】

图片

图片

1.2bool类型索引

bool索引选取值

b1 = df['年龄']>18
b1
df.loc[b1]
--------------------------------------------
df[df['年龄']>18]
df.loc[df['年龄']>18]#与df[df'年龄']>18]相同

行列的bool索引选取值

df.loc[df['年龄']>18,:]
#【条件筛选 行指定列大于18,列所有都选择】

1.3iloc和loc的区别

1.loc 是基于索引值的,切片是左闭右闭的
2.iloc 是基于位置的,切片是左闭右开的

2.常用代码

**df.index**:获取行索引

**df.columns**:获取列索引

**df.axes**:行和列索引

**df.columns = ['a','b','c']**:指定列名

**df.columns=[list('abcd')]**:指定列名

**df.columns = (['a','b','c'])**:指定列名

**df.set_index('b')** :将b列设置为索引值

**df.info()**:打印每一列的行列情况以及非空的情况

**df.describe():按列统计count的数值类信息**

**df.head(3)**:默认是查看前五行

**df.tail(3)**:默认查看倒数五行

**df.size:**数据有5*3 15个元素

**df.shape:**查看列表为5*3(5,3)

**df.shape[1]**: 获取列数

4.pandas读写文件

图片

pd.read_csv(filepath,header = 0): 第一行为列名字

pd.read_csv(filepath,**skiprows=[1,2])**忽略第一二行

pd.read_csv(filepath,skiprows=lambda x : x%2 == 0) 忽略偶数行

pd.read_csv(filepath,keep_default_na=False) 将nan的地方变为空值

5.pandas 和sql关联

1. 数据拼接【concat函数】

(1)简单拼接

pd.concat([a,b]) 没有则填充nan

pd.concat([a,b],ignore_idex=True) 重置行索引

(2)增加列索引

pd.concat([a,b],axis=1)#axis=1按列方向进行增加

2. 关联操作【merge函数】

  • 指定列进行关联 inner join
pd.merge(left,right,on='key')
  • 多个关联条件
pd.merge(left,right,on=['key1','key2'])
  • 指定how来确定关联的方式
pd.merge(left,right,how='left',on=['key1','key2'])
#how='left',righter outer
  • 列名不一样怎么关联 inner
pd.merge(left,right,left_on=['key1','key2'],right_on=['key3','key4'])#,shift+tab看提示
  • 通过索引来进行关联
left.set_index('key1',inplace=True)

right.set_index('key3',inplace=True)

pd.merge(left,right,left_index=True,right_index=True)

3. 分组计算

df.district.unqiue()#district为列名

unique()是以 数组形式(numpy.ndarray)返回列的所有唯一值(特征的所有唯一值)
nunique() Return number of unique elements in the object.即返回的是唯一值的个数

df.district.value_counts()#返回唯一值进行计数

3.1groupby函数

groups=df.groupby(“district”)#对每个地区进行分组

**groups.size()**每个分组类别的数据量

groups.groups#包含行索引列

**len(groups)#**查看所有分组

  • 可以遍历查看数值
for name,group in groups:
	print(name)

groups.mean() 对数值列进行均值统计

groups.sum() 分组求和

groups.age.mean() 指定列均值

groups.age.mean().head() 指定列

groups.agg([np.mean,np.sum,np.std])
作用多个聚合函数agg函数

groups.agg([“age”:np.mean,“age2”:np.sum,“age3”:np.std])
指定不同列不同函数

4. 转换过滤【groupby函数】

pd.fillna()缺失值填充

4.1对数据进行操作

s_score=lambda s:(s-s.mean())/s.std()

groups=d.groupby(“district”)

groups=[[‘age’,‘no’,‘ee’]].transform(s_score)#这两列使用transform进行转换

4.2分组过滤

df2=groups.filter(lambda g:g['vip']).mean()>=2000)

df2.district.value_coounts()

5. pandas 连接 mysql

5.1pandas 连接 mysql

import pandas as pd
import sqlalchemy
sql='select * from stu'
engine = sqlalchemy.create_engine('mysql+pymysql://root:mysql@localhost:3306/data')
df = pd.read_sql(sql,engine)

https://www.jb51.net/article/173950.htm

这行代码初始化创建了Engine,Engine内部维护了一个Pool(连接池)和Dialect(方言),方言来识别具体连接数据库种类。

创建好了Engine的同时,Pool和Dialect也已经创建好了,但是此时并没有真正与数据库连接,等到执行具体的语句.connect()等时才会连接到数据库。

create_engine还有其它可选的参数,比如:

engine =
create_engine(“mysql://user:password@hostname/dbname?charset=uft8”,
echo=True,pool_size=8,pool_recycle=60*30)

echo: 当设置为True时会将orm语句转化为sql语句打印,一般debug的时候可用

pool_size: 连接池的大小,默认为5个,设置为0时表示连接无限制

pool_recycle: 设置时间以限制数据库多久没连接自动断开

5.2 写入数据到 mysql

# 写入数据到 mysql
# 还有参数if_exists,表示有则插入
df1.to_sql('stu',engine,index=False,if_exists='append')

分析是使用添加append还是替换 https://www.jianshu.com/p/ec8bd2c8628a

replace操作是先删表,然后重新创表、再插入数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值