热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonpandas常用语法与实操

前言由于工作的原因,现在使用R较少,使用Python的频率较高,将给大家分享在工作中用到python使用技巧和相关的代码。安装Anac

前言

由于工作的原因,现在使用R较少,使用Python的频率较高,将给大家分享在工作中用到python使用技巧和相关的代码。

安装Anaconda64, 推荐使用jupyter notebook或者Spyder来做数据分析和建模,开发建议使用Pycharm

1、安装pandas

win+R---->cmd , 或者从Anaconda Prompt启动安装

pip install pandas

2.pandas 加载命名

import pandas as pd

3.pandas一维操作

 pd.Series( x, index=idx )

4.pandas 二维操作

pd.DataFrame( x, index=idx, columns=col )

index = ['A', 'B', 'C']
df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=['a', 'b', 'c'],index=index)

#获取信息值
df2.values

#获取index
df2.index

#获取列名
df2.columns

#前几行,默认5行
df2.head()

#后几行,默认5行
df2.tail()

#获取行列信息
df2.shape

#基本描述性信息
df2.describe()

5.Panel三维操作

  pd.Panel( x, item=itm, major_axis=n1, minor_axis=n2 )

不怎么用,感兴趣的可以研究一下。

6.数据表的存储和加载

(1)数据保存

data.to_excel('路径', index=False)    ---保存为excel格式, index, 其他详细信息可以通过查看官网获取

data.to_csv('路径')   ---保存为csv格式

data.to_sql('路径')  ---保存为sql格式

data.to_hdf('路径')  ---保存为hdf格式

(2)数据加载

data=read_excel('路径')

data=read_csv('路径')

data=read_sql('路径')

data=read_hdf('路径')

7.数据表的索引和切片

index = ['A', 'B', 'C']
df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=['a', 'b', 'c'],index=index)

(1)获取第一列信息:df2.a 等价于df2['a'] 等价于df.iloc[:,0]等价于df2.loc[:,'a']

  (2) 获取第一行信息:df2.iloc[0,:]      ---备注:iloc第一个控制行,第二个数控制列,:表示全部行或者列

(3)获取多列信息(前两列):df2[['a', 'b']] 等价于df2.iloc[:,0:2] 等价于df2.loc[:,'a':'b']  ---python计数从0开始,所以0:2表示0,1

(4)获取固定条件的信息:df2.loc[df2.a>3,:] 等价于df2[df2.a>3]   ---第一列大于3的所有信息

  (5)调用函数:df2.loc[lambda x :x.a> x.a.mean(),:]等价于df2[lambda x :x.a> x.a.mean()] --- 第一列大于第一列均值的所有信息

(6)调用函数+多条件:df2.loc[lambda x :(x.a> x.a.min())&(x.b>1),:]  ---a列大于其最小值同时b列大于1的所有信息

8.表关联

数据表可以按「键」合并,用 merge 函数;可以按「轴」来连接,用 concat 函数。

pd.merge( df1, df2, how=s, left_on=c1,right_on=c1 )

s=’left‘:左连接 (left join):合并之后显示 df1 的所有行

s='right':右连接 (right join):合并之后显示 df2 的所有行

s='outer':外连接 (outer join):合并 df1 和 df2 共有的所有行

s='inner':内连接 (inner join):合并所有行 (默认情况)

 

pd.concat(df1, df2,axis = 0 ,ignore_index=True)


  • axis = 0 (默认),沿着轴 0 (行) 连接,得到一个更长的 Series

  • axis = 1,沿着轴 1 (列) 连接,得到一个 DataFrame

9.重塑

它们只是改变数据表的布局和展示方式而已,stack和unstack可以实现互转


  • 列索引 → 行索引,用 stack 函数,stack的意思是堆叠,堆积

  • 行索引 → 列索引,用 unstack 函数,unstack即“不要堆叠”

For example:

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
data=DataFrame(np.arange(6).reshape((2,3)),index=pd.Index(['street1','street2']),columns=pd.Index(['one','two','three']))
print(data)
print('-----------------------------------------\n')
data2=data.stack()
data3=data2.unstack()
print(data2)
print('-----------------------------------------\n')
print(data3)
print('-----------------------------------------\n')
data4=data.unstack()
print(data4)

10.分组 (grouping)

data.groupBy( label )

 


  • ngroups: 组的个数 (int)

  • size(): 每组元素的个数 (Series)

  • groups: 每组元素在原 DataFrame 中的索引信息 (dict)

  • get_groups(label): 标签 label 对应的数据 (DataFrame)

import pandas as pd

df = pd.read_excel("https://github.com/chris1610/pbpython/blob/master/data/sample-salesv3.xlsx?raw=True")
df["date"] = pd.to_datetime(df['date'])
df.head()

#我们统计'ext price'这个属性在每个月的累和(sum)值,resample 只有在index为date类型的时候才能用

df.set_index('date').resample('M')['ext price'].sum()

date
2014-01-31 185361.66
2014-02-28 146211.62
2014-03-31 203921.38
2014-04-30 174574.11
2014-05-31 165418.55
2014-06-30 174089.33
2014-07-31 191662.11
2014-08-31 153778.59
2014-09-30 168443.17
2014-10-31 171495.32
2014-11-30 119961.22
2014-12-31 163867.26

#我们想知道每个用户每个月的sum值,那么就需要一个groupby

df.set_index('date').groupby('name')['ext price'].resample('M').sum()

name date
Barton LLC 2014-01-31 6177.572014-02-28 12218.032014-03-31 3513.532014-04-30 11474.202014-05-31 10220.172014-06-30 10463.732014-07-31 6750.482014-08-31 17541.462014-09-30 14053.612014-10-31 9351.682014-11-30 4901.142014-12-31 2772.90
Cronin, Oberbrunner and Spencer 2014-01-31 1141.752014-02-28 13976.262014-03-31 11691.622014-04-30 3685.442014-05-31 6760.112014-06-30 5379.672014-07-31 6020.302014-08-31 5399.582014-09-30 12693.742014-10-31 9324.372014-11-30 6021.112014-12-31 7640.60
Frami, Hills and Schmidt 2014-01-31 5112.342014-02-28 4124.532014-03-31 10397.442014-04-30 5036.182014-05-31 4097.872014-06-30 13192.19...

#我们可以使用Grouper写得更加简洁:

df.groupby(['name', pd.Grouper(key='date', freq='M')])['ext price'].sum()

# 按照年度,且截止到12月最后一天统计ext price的sum值

#Grouper里的freq可以方便的改成其他周期参数(resample也可以)

df.groupby(['name', pd.Grouper(key='date', freq='A-DEC')])['ext price'].sum()

name date
Barton LLC 2014-12-31 109438.50
Cronin, Oberbrunner and Spencer 2014-12-31 89734.55
Frami, Hills and Schmidt 2014-12-31 103569.59
Fritsch, Russel and Anderson 2014-12-31 112214.71
Halvorson, Crona and Champlin 2014-12-31 70004.36
Herman LLC 2014-12-31 82865.00
Jerde-Hilpert 2014-12-31 112591.43
Kassulke, Ondricka and Metz 2014-12-31 86451.07
Keeling LLC 2014-12-31 100934.30
Kiehn-Spinka 2014-12-31 99608.77
Koepp Ltd 2014-12-31 103660.54
Kuhn-Gusikowski 2014-12-31 91094.28
Kulas Inc 2014-12-31 137351.96
Pollich LLC 2014-12-31 87347.18
Purdy-Kunde 2014-12-31 77898.21
Sanford and Sons 2014-12-31 98822.98
Stokes LLC 2014-12-31 91535.92
Trantow-Barrows 2014-12-31 123381.38
White-Trantow 2014-12-31 135841.99
Will LLC 2014-12-31 104437.60
Name: ext price, dtype: float64

11.整合 (aggregating)

pandas引入了agg函数,它提供基于列的聚合操作。而groupby可以看做是基于行,或者说index的聚合操作。

df[["ext price", "quantity", "unit price"]].agg(['sum', 'mean'])

#针对不同的列使用不同的聚合函数:

df.agg({'ext price': ['sum', 'mean'], 'quantity': ['sum', 'mean'], 'unit price': ['mean']})

#自定义函数:

# 这里的x是sku对应的column
get_max = lambda x: x.value_counts(dropna=False).index[0]
df.agg({'ext price': ['sum', 'mean'], 'quantity': ['sum', 'mean'],'unit price': ['mean'],'sku': [get_max]})

12.apply函数


  • data.apply(np.mean):对DataFrame中的每一列应用函数np.mean

  • data.apply(np.max,axis=1):对DataFrame中的每一行应用函数np.max, axis=0作用于列

 

相关文章(重点收藏):快速入门pandas

 


推荐阅读
author-avatar
31號_K
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有