import pandas as pd
数据结构和数据分析
两种数据结构:
Series
索引值可以重复(自定义)
DataFrame
一组有序的列,每列可以是不同的值类型(数值、字符、布尔等)
读excle文件
# data1 = pd.read_excel('C:\\Users\\Administrator\\Desktop\\remmand.xlsx')
# data = data1.values
# data = data.T
Series
构建出来为一列数
创建序列
s=pd.Series(data,index,dtype,copy)
data的数据类型:
列表: data=[1,2,3,4]
a=pd.Series([1,2,3],index=['a','b','c'],dtype='int',name='something')
一维数组: data=np.array([1,2,3,4])
d=pd.Series(np.array([1,2,3]),dtype='int',name='something')
标量: data=5
b=pd.Series(5,index=['a','b','c'],dtype='int',name='something')
字典型(字典的键用于构建索引): data={'a':1,'b':2}
c=pd.Series({'a':1,'b':2,'c':2},dtype='int',name='something')
基本属性(赋值、获取)
- s.index
- s.value
- s.name
- s.dtype
- s.shape
- len(s) [说明:包含缺失值],s.count() [说明:不包含缺失值]
- s.unique() [不重复的值]
- s.value_counts() : 选出各个value的频数
缺失值的操作
给缺失值一个预设
s.fillna(值)
删除缺失值
s.dropna()
数据操作
取值
- 单行 : s[0]/s[‘索引’]
- 指定行 : s[[0,3]] => 0行和3行 ; s[[‘a’,‘c’]] ==> a行和c行(a和c为索引)
- 前后几行 : s.head(值)/s.tail(值) => 默认值为5
- 修改/增加值 : s[‘a’]=3
切片
- s[:2] ==> 0-1行
- s[-2:] ==> 访问最后两个元素
索引
- 按索引标签索引
单个:
s[‘a’] #a为索引值
多个:
s[[‘a’,‘c’]] #a、c为索引值 - 布尔索引
s[s>条件(s.mean()等)]
运算
两个运算的单元必须索引和长度一样,不一样,在缺省位置自动补充Nan
s1=pd.Series([1,2,3],index=['a','b','c'])
s2=pd.Series([3,2,1],index=['a','b','c','d'])
计算
s1.add(s2,fill_value=值)
s1.sub(s2,fill_value=值)
s1.mul(s2,fill_value=值)
s1.div(s2,fill_value=值)
DataFrame
创建
df=pd.DataFrame(data,index,columns,dtype,copy)
data:
列表:
data=[1,2,3,4]
data=[[1,2],[3,4]]
字典形式(键默认为列名): data=[{'a':1,'b':2},{'a':3,'b':4,'c':5}]
序列:
data={'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2],index=['a','b'])}
字典:
data={'one':[1,2,3,4],'two':[5,6,7,8]}
多维数组:
data是另一个DataFrame
df里是层次索引
数据操作
追加一列
- df[‘four’]=df[‘one’]+df[‘three’]
取值
列
- 列选择:df[‘one’]
- 列添加:df[‘three’]=pd.Series([10,20,30],index=[‘a’,‘b’,‘c’])
- 列删除:
- del df[‘one’] :在原数据上进行操作
- df.drop([‘a’],axis=1) : 返回一个新数据
- 列名称的修改:df.columns=[’’,’’] 给个新的名字
行
- 行切片: df[1:]
- 列中前两行: df[‘one’][:2]
- 选择前后几行:df.head(n) df.tail(n) => n不传值默认是5
- 按标签选择:
- 选择特定的行 df.loc[‘a’] / df.loc[[‘s’]]
- 按行与列的名称选择某值 df.loc[‘a’,‘one’] // df.at[‘a’,‘one’]
- 通过标签选择多轴:df.loc[:,[‘one’,‘two’]]
- 按位置选择
- 选择特定的行: df.iloc[0] / df.iloc[[0]]
- 按行与列的名称选择某值: df.iloc[0,0] / df.iat[0,0]
- 通过标签选择多轴: df.iloc[[0,1],[0,1]] / df.iloc[0:3,:]
- 附加行
- dfa=pd.DataFrame([[5,6],[7,8]],index=[‘e’,‘f’],columns=[‘one’,‘two’])
- df.append(dfa)
布尔索引
df[df.one>0] df[df<0]
过滤: df[df[‘two’].isin([2,3])]
编码区分:
pd.get_dummies(df[[‘dist’,‘floor’]])
解决共线性
随意删除两列(不同分类的列)
文件读取
pd.read_csv(‘文档路径’,sep=‘ :’,header=None)
基本属性
- df.index
- df.columns
- df.values
- df.shape
- df.info( ) : 获取数据的基本信息
- df.count() : 非Nan 值得数量
- df.dtypes
排序
- df.sort_index(ascending=False) : 行索引排序,排索引 ,ascending: 是否升序
- df.sort_values(by=‘列索引’,ascending=False) : by以哪列为准
藐描述性统计
- df.describe() : 是用来计算有关DataFrame列的统计信息的摘要
- df.mean() 、 df.median()
- df.std() 标准差
- df.cumsum 累计总和
- df.min()/df.max()
- df.idxmin() /df.idmax () 取得最值对应的索引
应用函数
apply()方法沿DataFrame的轴应用任意函数。默认情况下,操作按列执行
- df.apply(np.mean)
- df.apply(np.mean,axis=1)
- df.apply(lambda x:x.max()-x.min()) // x.replace()
缺失数据处理
检查是否存在Nan/缺失数据:
df.isnull().sum()
去除缺失值:
- df.dropna()
- df.dropna(how=‘all’) => all:全是缺失值时删除; any : 有缺失值时删除
- df.dropna(axis=1) =》 列方向操作
用预备值填充
df.fillna(de.mean())
拼接: concat
- pd.concat([s,s2],axis=1,key=[‘one’,‘two’])
- pd.concat([df1,df2],axis=1,join=‘outer’)
- df1.concat(df2,how=‘outer’) => 等价于上一个
合并:merge
df1 df2有共同的标签
- pd.merge(df1,df2,how=‘left’,on=‘X1’)
- pd.merge(df1,df2,how=‘right’,on=‘X1’)
- pd.merge(df1,df2,how=‘inner’,on=‘X1’)
- pd.merge(df1,df2,how=‘outer’,on=‘X1’)
导入导出
http://pandas.pydata.org/pandas-docs/stable/api.html#input-output
绘图
http://pandas.pydata.org/pandas-docs/version/0.13.1/visualization.html