下面都是工作种经常用到的方法,随手记录下来
1.1 数据库数据存储
from sqlalchemy import create_engine
engine= create_engine("mysql+pymysql://data_user:[email protected]: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()) #去除空格