Pandas包中DataFrame 的应用

1.Pandas包中DataFrame 的应用

下面都是工作种经常用到的方法,随手记录下来
1.1 数据库数据存储

        from sqlalchemy import create_engine
        engine= create_engine("mysql+pymysql://data_user:youruser@192.168.0.255:3306 /data2?charset=utf8")

这里一定要写成mysql+pymysql,不要写成mysql+mysqldb

    DataFrame.to_sql(name=新建表名,con=engine,flavor='mysql',if_exists=’fail’) 

如果该表已存在,想接着后面持续插入数据,if_exists就可以改为 append,
1.2 修改df的列名
暴力方法:df.columns=[‘a’,’b’,’c’]
缺点:必须依次写下所以列的名字
推荐方法:df.rename(columans={‘A’:’a’,’B’:’b’},inplace=True)
inplace为Ture则表示在原表上完成,为False则不改变原表的结构
1.3 按某列的值查找某一行或多行

    df.loc[df[‘columns’]==’value’

1.4 df的排名和排序
按特定列排序:result_df=result_df.sort(columns=’指定列名’,axis=0,ascending=False)
ascending为False 为降序,为True则为升序
也可以用 df.sort_value=(by=’列名’)的方法(这种方式比较规范,是官方比较提倡的)

    df.sort_value(['state','numericpopulation'],ascending=[False,True])

先遵循state列降序,在state相同的时候按numericpopulation列升序排列

排名:DataFrame.rank(method=’min’,ascending=True)
Method的方法是指遇到值相同的情况下排名取的数值,min则是指在值相同的时候选择小的排名,例如:2,2,3的排名为1,1,3
pd.set_option('display.width', 5000) 加大数据框显示的宽度 多列不换行
1.5 设置和还原索引
设置新的索引:

`df.set_index(‘想要设为索引的列名’,inplace=True)`

我们也可以设置双重索引:

df.set_inex('id','city').sortlevel(0)

设置id列和city列为索引,sortlevel(0)则是指定了以id列优先进行排序
还原重置索引:

df.reset_index(level=None,drop=False,inplace=False,col_level=0,col_fill=")`

Level控制了具体要还原到哪个等级的索引,drop为False则索引将还原到普通列,若为True就回丢失该列

应用:
利用数据的唯一id,对两个数据框进行数据跟新
df.update(a) 以斜体样式df为基础,更新df2中索引名相同的,其他列不同的值
1.6 Series基础数据格式
线性的数据结构, series是一个一维数组,Pandas 会默然用0到n-1来作为series的index, 但也可以自己指定index( 可以把index理解为dict里面的key )
新建一个series

    idx=[1,5,7,9,17]
    value=['pf_score','hospital_score','education_score','tour_score','market_score']
    agent_name = pd.Series(value, idx)

统计state列的各词出现的次数

df.state.value_count()

count_list.count(target) 在统计列表中,查找指定的数字,字符出现的次数
1.7 多列,多数据框合并

    dataframe["newColumn"] = dataframe["age"].map(str) +'/'+ dataframe["phone"] + '/'+dataframe["address”]

将多列信息合并以/隔开放在一个新列里面,map(str)函数是从该列拿出来的非字符类型转化为字符型,因为只有是字符型才能拼接

frames=[df1,df2,df3]
result=pd.concat(frames)

数据框的拼接用concat()函数,但需要数据框的列数量相同
1.8 resample结合group by的使用
resample只有在index为pandas中的datetime类型的时才能使用
resample( )的参数为Y,M,D分别表示从年,月,日水平从数据中抽样
例1:每隔20天作为周期抽样,计算每个周期内的累计和

df.set_index(‘date’).resample(‘20D’)[‘account number].sum()

例2:计算每个用户每个月的sum值

    1.	df.set_index('date').groupby('name')['ext price'].resample('M').sum() 
    2.	df.groupby(['name',pd.Grouper(key='date',frep='M')])['ext price'].sum()

上述两种方法都可以实现功能,效果相同
df.get_group(‘john’) 提取上面已经分类好的姓名为john的分类信息
df.groupby 返回的是一个DataFrameGroupBy的结构,这个结构必须调用聚合函数之后,才会得到结论为Series的数据结构
df.agg()是DateFrame的直接方法,返回的也是一个DateFrame,它是对列进行聚合操作
例: df.agg({‘ext price’:[‘sum’,’mean’],’quantity’:[‘sum’,’mean’]})
1.9 数据条件查询—query
DataFrame的数据进行条件选取的时候,可以用强大的query功能,类似于SQL查询中的where的条件
Eg: cd=df.query(“city==’成都市’ and brand==’丰田’”)
结果就会返回符合条件的数据
注:query中判断相等,必须用两个等号这跟SQL中where语法有些不同

1.9.1 merge函数的使用
df1.merge(df2,on = 'key',how = 'left')
#左连接,左侧DataFrame取全部,右侧DataFrame以key值对应每条数据
how参数的连接方式:‘inner’(默认);还有,‘outer’、‘left’、‘right’
left_on、right_on是指定表中非索引列为连接键,left_index、right_index是指定表中索引列为连接键,两者可以组合,是为了区分是否是索引列
1.9.2 转换数据类型

    df['columns'].astype(np.int64) #转为整型
    df['columns'].apply(lambda x:x.strip()) #去除空格
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值