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')
##获取今天和昨天的日期
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 语法
- Python—基础语法
Python—基础语法:类和对象(类、方法、属性、实例对象、初始化函数、继承)详细解析
18、pandas.pivot_table
pandas.pivot_table
table = pd.pivot_table(df, values='D', index=['A', 'B'],columns=['C'], aggfunc=np.sum)