D3 pandas快速入门

4、pandas快速入门
import pandas as pd
import numpy as np
s=pd.Series([1,3,5,np.Na])
s=pd.Series([1,3,5,np.NaN,8,4]) NaN=not a number
s

dates=pd.date_range(‘20160301’,periods=6)
dates
data=pd.DataFrame(np.random.randn(6,4),Index-dates,columns=list(‘ABCD’))
data
data.shape
data,values

– 字典形式
d={‘A’:1,‘B’:pd.Timestamp(‘20130301’),‘C’:range(4),‘D’:np.arange(4)}
d
df=pd.DataFrame(d)
df=pd.DataFrame(d)
df
df.dtypes
df.A
df.B
typr(df.B)

– 查看数据
data
– 查看前几行(默认前五行)
data.head()
– 查看前两行
data.head(2)
– 查看最后几行数据(默认后五行)
data.tail()
– 查看最后三行
data.tail(3)
– 行标签
data.index
– 列标签
data.columns
– 值
data.values
– 数据整体情况(基本统计数据)
data.describe()
– 转置
data.T
data.T.shape
– 排序
– 行排序
data.sort_index(axis=1)
data.sor
– 行排序,逆序
data.sort_index(axis=1,ascending=False)
– 列排序,逆序
data.sort_index(axis=0,ascending=False)
– 通过值进行排序
data.sort_values(by=‘A’)
data[‘A’]
data.A
– 2-4行
data[2:4]
– 行标签
data[‘20160302’:‘20160305’]
– loc只认行/列标签
data.loc[‘20160302’:‘20160305’]
– iloc位置标签
data.iloc[2:4]
– B,C两列
data.loc[:,[‘B’,‘C’]]
– 指定两行两列
data.loc[‘20160302’:‘20160305’,[‘B’,‘C’]]
– 某特定值
data.loc[‘20160302’,‘B’]
– 索引日期
data.at[pd.Timestamp(‘20160302’),‘B’]
– 选择第一行
data.iloc[1]
– 选择两行
data.iloc[1:3]
– 选择某行某列
data.iloc[1:3,2:4]
– 选择所有行,某列
data.iloc[:,1:3]
– 某特定位置
data.iloc[1,1]
data.iat[1,1]
%time df.iloc[1,1]
%time df.iat[1,1] 两者运行时间
– 表中条件
data[data.A>0]
data[data>0]

data2=data.copy()
data2
tag=[‘a’]*2+[‘b’]*2+[‘c’]*2
data2[‘TAG’]=tag
data2
– 过滤
data2[data2.TAG.isin([‘a’,‘c’]

– 添加元素
data.iat[0,0]=100
data
– 修改一列
data.A=range(6)
data
data.B=200
data.iloc[:,2:5]=1000
处理丢失数据,数据运算,数据合并,数据分组
%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

dates=pd.date_range(‘20160203’,periods=6)
df=pd.DateFrame(np.random.randn(6,4),Index=dates,columns=list(‘ABCD’))
df

df1=df.reindex(Index=dates[0:4],column=list(df.columns)+[‘E’])
– 2,3行E列替换为2
df1.loc[dates[1:3],‘E’]=2
df1
– 去除NaN值
df1.dropna()
– 替换NaN
df1.fillna(value=5)
– 查看空数据,空数据的为true
pd.isnull(df1)
pd.isnull(df1).any().any()
– 平均值,空数据不参与计算
df1.mean
– 按行求平均
df1.mean(axis=1)
– 累加
df1.cumsum()

– 广播
s=pd.Series([1,3,5,np,nan,6,8],index-dates).shift(2)
s
df
– df-s,空值不参与计算(一般先预处理,dropna…)
df.sub(s,axis=‘index’)
– 累加值
df.apply(np.cumsum)
df.apply(lamda x:x.max()-x.min())

def _sum(x):
print(type(x))
return x.sum()
df.apply(_sum)

s=pd.Series(np.random.randint(10,20,size=20)
s
– 产生数字
s.value_counts()
– 产生数字最多
s.mode()

– 数据合并
df=pd.DataFrame(np.random.randn(10,4),columns=list(‘ABCD’))
df
df.iloc[:3]
df.iloc[3:7]
df.iloc[7:]
df1=pd.concat([df.iloc[:3],df.iloc[3:7],df.iloc[7:])
df1
– 判断df和df1是否相同
df=df1
(df==df1).all().all()

left=pd.DataFrame({‘key’:[‘foo’,‘foo’],‘laval’:[1,2]})
right=pd.DataFrame({‘key’:[‘foo’,‘foo’],‘raval’:[4,5]})
left
right

SELECT * FROM left INNER JOIN right ON left.key=right.key;(与下面语句等价)

pd.merge(left,right,on=‘key’)

– 另一个合并数据的方法
s=pd.Series(np.random.randint(1,5,size=4),index=list(‘ABCD’))
s
df.append(s,ignore_index=True)

– 分类统计
df=pd.DataFrame({‘A’:[‘foo’,‘bar’,‘foo’,‘bar’,
‘foo’,‘bar’,‘foo’,‘foo’],
‘B’:[‘one’,‘one’,‘two’,‘three’,
‘two’,‘two’,‘one’,‘three’],
‘C’:np.random.randn(8),
‘D’:np.random.randn(8)})
df
– 按A分组,进行统计
df.groupby(‘A’).sum()
df.groupby([‘A’,‘B’]).sum()
df.groupby([‘B’,‘A’]).sum()

数据整形,数据透视,时间序列,数据可视化,数据载入与保存
#设置为inline风格
%matplotlib inline
#包导入
import pandas as pd
import numpy as np
import matplotlib.pylot as plt

数据整形
tuples=list(zip(*[[‘bar’,‘bar’,‘baz’,‘baz’,
‘foo’,‘foo’,‘qux’,‘qux’],
[‘one’,‘two’,‘one’,‘two’
‘one’,‘two’,‘one’,‘two’]]))
tuples
index=pd.MultiIndex.from_tuples(tuples,name=[‘first’,‘second’])
index
df=pd.DateFrame(np.random.randn(8,2),Index-Index,column=[‘A’,‘B’])
df
– 列索引变成行索引
stacked=df.stack()
stacked
stacked.index
– 转换回来
stacked.unstack
– 再转换一次
stacked.unstack().unstack()

– 数据透视
df=pd.DataFrame({‘A’:[‘one’,‘one’,‘two’,‘three’]=3,
‘B’:[‘A’,‘B’,‘C’]=4
‘C’:[‘foo’,‘foo’,‘foo’,‘bar’,‘bar’,‘bar’]=2
‘D’:np.random.randn(12),
‘E’:np.random.randn(12)})
df
– A,B两列为行索引,C作为列索引
df.pivot_table(values=[‘D’],index=[‘A’,‘B’],columns=[‘C’])
df.pivot_table(values=[‘E’],index=[‘A’],columns=[‘C’])
df(df.A==‘one’).groupby(‘C’).mean()

– 时间序列
rng=pd.date_range(‘20160302’,periods=600,freq=‘s’)
rng
s=pd.Series(np.random.randint(0,500,len(rng),Index=rng)
s
–重新采样
s.resample(‘2Min’,how=‘mean’)
rng=pd.period_range(‘2000Q1’,‘2016Q1’,freq=‘Q’)
rng
– 转换成时间日期格式
rng.to_timestamp()
pd.Timestamp(‘20160302’)-pd.Timestamp(‘20160201’)
pd.Timestamp(‘20180202’)+pd.TimeDelta(days=5)

–类别数据
df=pd.DataFrame({“id”:[1,2,3,4,5,6],“raw_grade”:[‘a’,‘b’,‘b’,‘a’,‘a’,‘d’]})
df
df(‘grade’)=df.raw_grade.astype(‘category’)
df
df.grade
df.grade.cat.categories
– 重命名
df.grade.cat.categories=[‘very good’,‘good’,‘bad’]
df
– 排序,降序
df.sort_values(by=‘grades’,ascending=False)

– 数据可视化
s=pd.Series(np.random.randn(1000),index=pd.date_range(20000101’,periods=1000))
s=s.cumsum()
s.plot()

– 数据读写
df=pd.DataFrame(np.random.randn(100,4),columns=List(‘ABCD’))
df
– 保存
df.to_csv(‘data.csv’)
– 查看
%Is
– 查看内容
%more data.csv
– 读取
pd.read_csv(‘data.csv’)
– 指定索引列
pd.read_csv(‘data.csv’,index_col=0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值