Adventure项目中函数总结

2020-08-06  本文已影响0人  Samdata

pandas与MySQL连接和储存

MySQL连接——pymysql

import pandas as pd

import pymysql

pymysql.install_as_MySQLdb()

from sqlalchemy import create_engine

engine = create_engine('dialect+driver://username:password@host:port/database')

df=pd.read_sql("select * from xxx",con=engine)

dialect -- 数据库类型

driver -- 数据库驱动选择

username -- 数据库用户名

password -- 用户密码

host 服务器地址

port 端口

database 数据库

MySQL储存

engine = create_engine('dialect+driver://username:password@host:port/database')

df.to_sql('表名', con=engine, index= ,if_exists = ' ')

name: 输出的表名

con: 与read_sql中相同,数据库链接

if_exits: 三个模式:fail,若表存在,则不输出;replace:若表存在,覆盖原来表里的数据;append:若表存在,将数据写到原表的后面。默认为fail

index:是否将df的index单独写到一列中,False或True,默认为False


时间数据datetime与str的转换

时间数据格式之间的相互转换:

from datetime import datetime

(1)datetime.datetime 转str:

 b = datetime.now().strftime('%Y-%m-%d')

(2)str 转datetime.datetime

 d = datetime.strptime(b, '%Y-%m-%d')  # strptime()内参数必须为string格式

 (3)str 转 datetime.date

  先将str转datetime,再转datetime.date

  e = datetime.date(d) # date()内参数需要datetime.datetime型

  (4)datetime.date转str

   h = str(e)

来自 <https://blog.csdn.net/zhonglongshen/article/details/88820848>

环比的计算

diff函数

函数原型:

DataFrame.diff(periods=1, axis=0)

效果等于:

df-df.shift()

参数:

periods:移动的幅度,int类型,默认值为1。

axis:移动的方向,{0 or ‘index’, 1 or ‘columns’},如果为0或者’index’,则上下移动,如果为1或者’columns’,则左右移动。

diff()应用:

第一种:

overall_sales_performance['sum_amount_diff']=(overall_sales_performance.sum_amount.diff()/overall_sales_performance.sum_amount.shift()).fillna(0)

第二种:

#求每月自行车销售订单量环比,观察最近一年数据变化趋势

#环比是本月与上月的对比,例如本期2019-02月销售额与上一期2019-01月销售额做对比

order_num_diff = list((overall_sales_performance.order_num.diff()/overall_sales_performance.order_num.shift()))

order_num_diff.pop(0) #删除列表中第一个元素

order_num_diff.insert(0,0) #将0新增到列表末尾

overall_sales_performance = pd.concat([overall_sales_performance,pd.DataFrame(order_num_diff)])

pct.change()函数

DataFrame.列名.pct_change(periods=1, fill_method=‘pad’, limit=None, freq=None, **kwargs)

表示当前元素与先前元素的相差百分比,当然指定periods=n,表示当前元素与先前n 个元素的相差百分比。


pandas取消科学计数法

pd.set_option('display.float_format', lambda x: '%.3f' % x)


sort_values, DataFrame排序:

df.sort_values(by= , axis= , ascending= , inplace=)

#axis=0表示对行操作,axis=1表示对列进行操作;ascending=True表示升序,ascending=False表示降序;inplace=True表示对原始DataFrame本身操作,因此不需要赋值操作,inplace=False相当于是对原始DataFrame的拷贝,之后的一些操作都是针对这个拷贝文件进行操作的,因此需要我们赋值给一个变量,保存操作后的结果。


list排序

list.sort(cmp=None, key=None, reverse=False)

参数

cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。

# 获取列表的第二个元素

def takeSecond(elem):

    return elem[1] 

random = [(2, 2), (3, 4), (4, 1), (1, 3)]

random.sort(key=takeSecond)  

print(random)

以上实例输出结果如下:

排序列表:[(4, 1), (2, 2), (1, 3), (3, 4)]


dataframe去重,将某列元素提取到列表中

df.drop_duplicates(['列名'])

此种去重方法,会让元素按照dataframe的顺序填充到列表中

list(gather_customer_order_10_11_group.drop_duplicates(['chinese_territory']).chinese_territory)

df.列名.unique()

此种方法去重后,元素并未按照dataframe顺序填充到列表中,之后操作,需要注意。必要时候采用sort_index()

list(gather_customer_order_10_11_group['chinese_territory'].unique())

示例

agg的用法和使用范围

用法

DataFrame.agg(funcaxis = 0* args** kwargs 

func : 函数,函数名称,函数列表,字典{‘行名/列名’,‘函数名’}

使用范围:

1.agg与dataframe一同使用,对一列或一行进行聚合计算

2.agg与groupby一同使用,对groupby之后的一行或一列进行聚合计算,此方法使用更为广泛。


loc、iloc、at、iat的区别

1、 loc和iloc函数都是用来选择某行的,iloc与loc的不同是:iloc是按照行索引所在的位置来选取数据,参数只能是整数。而loc是按照索引名称来选取数据,参数类型依索引类型而定;

2、 at和iat函数是只能选择某个位置的值,iat是按照行索引和列索引的位置来选取数据的。而at是按照行索引和列索引来选取数据;

3、 loc和iloc函数的功能包含at和iat函数的功能。


上一篇下一篇

猜你喜欢

热点阅读