pandas使用记录

1、pandas读取excel数据

data_path='/Users/apple/Downloads/name.xlsx'
pd_date = pd.read_excel(data_path,index_col=None)

pd.read_excel官方文档
index=None 不设置索引,默认0,1,2…
index=0 将第一列设为索引
index=1 将第二列设为索引

2、查看数据基本情况

pd_date.head()
pd_date.describe()
pd_date.info()
user_info.age.sum()
user_info.age.cumsum() #累加求和
user_info.describe() #查看数字类型的列整体概况
user_info.describe(include=['object']) #查看非数字类型的列的整体情况
user_info.sex.value_counts() #统计某列中每个值出现的次数,相当于分组
user_info.groupby('sex')['sex'].count()
user_info.age.idxmax() #获取某列最大值或最小值对应的索引
user_info.age.idxmin()  

3、改变数据类型

##int转object
pd_date['clomu_name'] = pd_date['clomu_name'].astype('object')
##object转float64
pd_date['clomu_name'] = pd_date['clomu_name'].astype('floa64')
##object转datetime64[ns]
pd_date['pdate'] = pd.to_datetime(pd_date['pdate'],format='%Y-%m-%d %H:%M:%S')

pd.to_datetime官方文档

##获取今天和昨天的日期
today = datetime.date.today()
yesterday = str(today - datetime.timedelta(days=1))

4、dateframe切片

pd_data.ix['2019-09-01']

Python的DataFrame切片大全(包含多重索引)
pandas取dataframe特定行/列
Pandas进阶之DataFrame多级索引

df.swaplevel('Six','Class')    # 更改行索引的层级
##字段转pd.Series后按值排序
pd.Series(names['quent_%s'%i]).sort_values(ascending=False)
##字段转pd.Series后按索引排序
pd.Series(names['quent_%s'%i]).sort_index(ascending=False)

5、groupby

total = pd_date.groupby(['pdate','device_type'])['0cnt','1cnt'].sum()

6、环比同比
使用diff(periods=1, axis=0)) 一阶差分函数
periods:移动的幅度 默认值为1
axis:移动的方向,{0 or ‘index’, 1 or ‘columns’},如果为0或者’index’,则上下移动,如果为1或者’columns’,则左右移动。默认列向移动

##一阶差分函数
pd_date.0cnt.diff()
##与上一行环比
pd_date.0cnt.pct_change(periods=1,axis ='index')

7、日期的加减

relativedelta(years=+2, months=+8, days=+16,hours=+20, minutes=+54, seconds=+47)

import datetime
from dateutil.relativedelta import relativedelta
sdate  = datetime.datetime.strptime('2019.01.05','%Y.%m.%d')
edate  = sdate + relativedelta(months=1)
print(edate)

8、reindex和reset_index

pd_data.reset_index(drop=True)

添加参数 reset_index(drop=True) 那么原index会被丢弃,不会显示为一个新列。
9、dateframe删除一列

pd_data = pd_data.drop('column_name',1)

10、Merge、join和concat
Pandas中DataFrame数据合并、连接(concat、merge、join)
merge列的连接
join是索引的连接
concat可以进行列的连接,也可以进行行的连接

df1.merge(df2,left_on='pdate_new', right_on='pdate')

11、map, apply, transform, agg
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Pandas系列(二)- DataFrame数据框

  • map 是 Series 中特有的方法,通过它可以对 Series 中的每个元素实现转换。如果我想通过年龄判断用户是否属于中年人(30岁以上为中年),通过 map 可以轻松搞定它。我想要通过城市来判断是南方还是北方,我可以这样操作。
  • apply 方法既支持 Series,也支持 DataFrame,在对 Series 操作时会作用到每个值上,在对 DataFrame 操作时会作用到所有行或所有列(通过 axis 参数控制)。# 对 Series 来说,apply 方法 与 map 方法区别不大。
  • applymap 方法针对于 DataFrame,它作用于 DataFrame 中的每个元素,它对 DataFrame 的效果类似于 apply 对 Series 的效果

python处理数据的风骚操作[pandas 之 groupby&agg]

《Python数据科学手册》(Jake Vanderplas著)的146页,简单的说,agg,transform和apply的输入对象,都是分组后的DataFrame,区别在于,他们的输出类型不一样,agg输出的是缩减后的标量(或者标量列表);transform输出的是原输入的DataFrame大小的,但是经过了转换的DataFrame;apply就很灵活了,它既可以是缩减后的标量,也可以是pandas对象(注意这里是pandas对象哦,并不仅仅是DataFrame哦)

total_merge.groupby('pdate_x')['lead_cnt'].transform(lambda x: x.sum()-x / x.count())
total_merge.groupby('pdate_x').agg({'lead_cnt':{'col1_mean': 'mean', 'col1_sum': 'sum'}, 'shanghu_0d_cnt': {'col2_count': 'count'}})

12、lambda 中if-elif-if
lambda x: 语句1 if 条件1 else ( 语句2 if 条件2 else 语句3 )

f = lambda x: 1 if x=="C" else (0 if x=="S" else 2)

if 的简洁写法:

c = a if a>b else b
c = [b, a][a > b]

13、环比
periods步长
axis=index按行算 axis=column计算两列的环比值

pd_total.columns_name.pct_change(periods=1,axis ='index')

pandas计算环比与同比
14、移动时间窗口
pandas处理时间序列(4): 移动窗口函数
《利用python进行数据分析》读书笔记–第十章 时间序列(三)

15、字典的用户
Python字典及基本操作(超级详细)

##字典添加一个元素
dict_a[key] = values

16、批量生成变量名

[input]: 
names = locals()
for i in xrange(1, 3):
    names['x%s'%i] = i
print x1, x2, x3
[output]: 1 2 3

17、pyhton 语法

  1. Python—基础语法
    Python—基础语法:类和对象(类、方法、属性、实例对象、初始化函数、继承)详细解析

18、pandas.pivot_table
pandas.pivot_table

table = pd.pivot_table(df, values='D', index=['A', 'B'],columns=['C'], aggfunc=np.sum)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值