1、创建对象,浏览数据
##创建对象,浏览数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#创建series
s=pd.Series([1,2,4,6,np.nan,9,10],index=list('ABCDEFG'))
#创建二维数组
data=pd.date_range('20130101',periods=6)
#index行索引,columns列索引
df=pd.DataFrame(np.random.randn(6,4),index=data,columns=['A','B','C','D'])
#将字典型数据传入dataframe
df2=pd.DataFrame({
'A':1,
'B':pd.Timestamp('20130102'),
'C':pd.Series(1,index=list(range(4)),dtype='float32'),
'D':np.array([3]*4,dtype='int32'),
'E':pd.Categorical(['test','train','test','train']),
'F':'foo'
})
#基本属性
df2.dtypes
df2.shape
df2.A #字段也可以作为基本属性
df2 #......
#浏览数据
df.head(3) #取头部数据
df.tail(3) #取尾部数据
df2.index
df2.columns
df.values
df.describe()
df.sort_index(axis=1,ascending=False) #按轴排序,axis=1,按cloumns字段降序排列
df.sort_values(by='A',ascending=False)
#选择数据
df.A
df['A']
df[0:3] #通过选择行切片
df['20130102':'20130104']
#使用标签获取横截面
data[0] #第一个行标签 (index[0])
df.loc[data[0]] #行标签的该行内容
#按标签选择多轴
df.loc[data[0]:data[2],['A','C']]
df.loc['20130102':'20130104',['A','C']]
#使用位置获取元素
df.iloc[3:5,0:2]
df.iloc[[1,2,4],[0,2]]
#布尔索引
df[df.A>0] #筛选出所有A列大于0的数值,所在行
df[(df.A>0) & (df.B<0)]
#使用isin()进行过滤
df3=df.copy()
df3['E']=['one','two','three','four','two','three'] #新增一列,代表类别
a=df3[df3['E'].isin(['two','three'])] #分类筛选
#设置有关
s1=pd.Series([1,2,3,4,5,6],index=pd.date_range('20130102',periods=6))
df['F']=s1
#按标签设置值
df.at[data[0],'A']=0
#按位置设置值
df.iat[0,1]=0
#通过分配Numpy数组设置
df.loc[:,'D']=np.array([5]*len(df))
#索引重排,但不改变df值
df.reindex(index=data[0:4],columns=list(df.columns)+['E'])
df.loc[data[0]:data[1],'E']=1 #新建E列,更新0行和1行的数据,包括1行
#缺失值处理
df.dropna(how='any') #删除任何含有缺失值的行
df.fillna(value=5) #填充缺失值
pd.isnull(df) #查看是否有空值
2、常规操作
#求平均值
df.mean() #每列平均值
a=df.mean(1) #每行平均值
df.apply(np.cumsum) #传输方法累计求和
df.apply(lambda x:x.max()-x.min()) #自定义方法
#统计值的频数
s = pd.Series(np.random.randint(0, 7, size=10))
s.value_counts()
#字符串方法,和python用法类似
s=pd.Series(['A','B','AFA','fsdfw','tyte'])
s.str.lower() #全部小写
3、数据合并
#数据合并
df=pd.DataFrame(np.random.randn(10,4))
pieces=[df[:3],df[3:7],df[7:]] #切片,形成列表
pd.concat(pieces) #合并
#merge
left=pd.DataFrame({'key':['foo','foo'] ,'lval':[1,2]})
right=pd.DataFrame({'key':['foo','foo'] ,'rval':[4,5]})
pd.merge(left,right,on='key') # 根据key值,将left,right合并
#append
s=df.iloc[3]
df.append(s,ignore_index=True) #在末尾添加第三行的数据
#group
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)})
a=df.groupby('A').sum()
b=df.groupby(['A','B']).sum()
#reshaping
list(zip(*[['bar', 'bar', 'baz', 'baz','foo', 'foo', 'qux','qux'],
['one', 'two', 'one', 'two',
'one', 'two', 'one', 'two']]))
4、其余数据操作见https://blog.csdn.net/jiangjiang_jian/article/details/80022918
5、不均等分割数据集
df = DataFrame(list(info.find()))
bins=[0,10,50,100,200,500,1000,2000,5000,10000] #分割界限
counts=Series([int(i)for i in df.comments]) #格式化
cats=pd.cut(counts,bins) #分割
a=pd.value_counts(cats) #每一区域计数