基础部分:创建,简单提取,简单分析
1.创建表格
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
s = pd.Series([1,3,5,np.nan,6,8]) #创建series数组,默认创建整数索引
dates = pd.date_range('20140201',periods=6) #创建时间索引,开始为2014 02 01 ,持续6次
data = pd.DataFrame(np.random.rand(6,4),index=dates,columns=list('ABCD'))#创建DataFrame
注:最终表格格式
2.按要求提取表格信息
type = data.dtypes #返回每行的格式
head3 = data.head(3) #打印前三行、
tail5 = data.tail(5) #打印后5行
index = data.index #返回行名称‘
columns = data.columns #返回列名称
valuse = data.values #返回所有数据
3 对数据进行排序及转置处理
dataT = data.T #d对数据进行转置
data_sort_in0 = data.sort_index(axis=0,inplace=False,ascending=True) #按行标签大小进行升序
#排列,inplace为是否替换原数据,默认FLASE,ascending代表是否按升序,默认True
data_sort_in1 = data.sort_index(axis=1,inplace=False,ascending=False)
data_sort_value = data.sort_values(by=['A','B'],ascending=[True,False]) #按A,B进行排序,先顺序后降序
注:此为data_sort_in1 = data.sort_index(axis=1,inplace=False,ascending=False) 后结果,按列排序
4 数据信息整理
describe = data.describe() #数据统计:个数,均值,标准差,最大,最小
mean = data.mean() #返回每列的平均值,同时支持min,max,sum操作
count = data.value_counts() #统计数值出现的次数
注:下图为进行describe后出现的结果,包括个数,平均数,标准差和其他数据
5 apply 将函数操作用于表格的每一行数据并返回结果
dataa = data.apply(lambda x:x.max()-x.min(),axis=1) #apply,将函数应用于每一行,默认是对列进操作
6 数据整体移动 shift
s=pd.Series([1,3,5,np.nan,6,8],index=dates).shift(periods=2,axis=0) #将横,纵排数据整体上下移动,不循环。空补NAN
数据获取
1 简单获取
A = data.A #单独选择列名称,返回series,
B = data[2:5] #切片操作,返回行切片
2 通过标签选择,即通过loc指定标签名称
dataa = data.loc['2014-02-03' : '2014-02-05','A':'C'] #包括首尾
3 通过位置进行选择,即通过iloc指定位置
dataa = data.iloc[3] #第3行
dataa = data.iloc[2:3,1:2]
dataa = data.iloc[[1,2,3],[0,2]]
4 通过布尔索引
dataaa = data[data.A>0]
dataaa = data[data.A.isin(['a','c'])]
数据修改
1.通过位置改值
data.iat[0,1] = 0
2.通过Series新列
s1 = pd.Series([1,2,3,4,5],index=pd.date_range('20140201',periods=5)) #数据不全,自动补NAN
data['F'] = s1
3.通过numpy数组设置值
data.loc[:,'D'] = np.array([5]*len(data))
4.重构索引以创建新表 reindex
data1 = data.reindex(index=datas[0:4],columns=list(data.columns)+['E']) #复制数据并对应行数数据进行操作
data1.loc[datas[1:3],'E']=2
缺失值操作
data2= data1.dropna() #删除存在缺失值的行
data3 = data1.fillna(value=3) #将缺失值替换为3
data4 = pd.isnull(data1) #返回布尔数组,非null则返回ture
数据合并
1.concat 较为简单的上下,左右合并
#详细参考 https://blog.csdn.net/mr_hhh/article/details/79488445
data1 = data.iloc[1:3]
data2 = data.iloc[5:]
data3 = pd.concat([data1,data2],axis=0,keys=['a','b'])
#key参数标明合并表的内容属于那一部分,axis为列操作
注:下图为最后结果
2.merge 类似并集操作
```python
left=pd.DataFrame({'key':['foo','xx'],'lval':[1,2]})
right=pd.DataFrame({'key':['foo','x'],'rval':[4,5]})
dataa = pd.merge(left,right,on='key') #依据key列是否相同进行操作
注:下图为最后结果
3 append 将行连接到dataframe上
df = pd.DataFrame(np.random.rand(8,4),columns=['A','B','C','D'])
s = df.iloc[3]
df.append(s,ignore_index=True)
# ignore_index参数表示是否使用df表index,true则表示新创建一个index 从0开始
数据分组
#分组
df = pd.DataFrame({"A":['foo','bar']*4,
"B":['one','tow']*4,
"C":np.random.rand(8),
"D":np.random.rand(8)})
ga = df.groupby('A') #获取分组元素,无法直接打印
groups = ga.groups #获取分组的整体信息#'bar': Int64Index([1, 3, 5, 7], dtype='int64'), 'foo': Int64Index([0, 2, 4, 6], dtype='int64')}
size = ga.size() #获取每组的个数
bar = ga.get_group('bar') #获取每个组的详细信息
mean = ga.mean() #获取每组的平均值,包括min,max,sum
#分组双索引
df.groupby(['A','B']).sum()
画图
t = pd.Series(np.random.randn(1000),index=pd.date_range(('20000101'),periods=1000))
t =t.cumsum()
t.plot()
plt.show()
数据读写
df = pd.DataFrame(np.random.randn(1000,4),columns=list('ABCD'))
df.to_csv("data.csv")
df = pd.read_csv("data.csv",index_col=0)
print(df)