pandas学习笔记

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)   #每一区域计数

 

 

你可能感兴趣的:(pandas学习笔记)