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操作是先删表,然后重新创表、再插入数据。