1. 开发工具
Jupyter Notebook:基于网页的交互计算的应用程序
Spyder: 优点可以模仿MATLAB的工作空间功能,方便的观察和修改数组的值
2. 常用数据结构
数字;字符串;列表 (一维序列,内容可以修改,用[]标识);元组;字典 (键值对,可以用 {} 表示);集合
3. 控制语句和函数
三元表达式:output = “Yes” if i >3 else “No”
推导式是一种for循环, output=[i+10 for i in range(1,5)]; output= [i+10 for i in range(1,5) if i>2]
匿名函数:lambda
4. 表格对象
NumPy: 数据元素必须具有相同的类型 np.array([1,2,3], dtype=float)
Pandas: 表格处理,提供了2种数据类型,分别是Series, DataFrame和Panel; Series保存一维数据,DataFrame保存二维数据,Panel保存三位及以上
4.1 Series数据结构
本质上是一个含有索引的一维数组,包括index和values,分别使用s.index,s.values进行查看,带有索引的列表,索引可以理解为R中的行名,
4.2 DataFrame(数据框)
类似于Excel电子表格,与R语言的DataFrame数据结构类似
创建:
df = pd.DataFrame(['a', 1, 2], ['b', 3, 5], ['c', 3,3], columns=['x', 'y', 'z'])
df=pd.DataFrame(np.zeros(3,3), columns=['x', 'y', 'z'])
字典创建:
df = pd.DataFrame({'x' :['a','b', 'c'], 'y':range(1,4), 'z':[2,5,3]})
数据框统计:
df.shape, len(df), df.shape(1), df.columns, df.index。
重新定义列名:df.columns = ["X", "Y", "Z"]
重新更改某列的列明:df.rename(columns={'x':'X'}, inplace=TRUE)
df.head(); df.tail()
数据框额多重索引:df.set_index([‘X’, ‘year’])有两层索引
空数据框的创建:df_empty = pd.DataFrame(columns=["x", "y", "z"])
4.3 Categorical: R语言的因子向量
cut=['Fair', 'good', 'Premium', 'Ideal']
cut_F=pd.Categorical(cut)
改变因子的顺序:cut_F= cut.astype('category', categories=['Good', 'Very Good', 'Ideal'], order=TRUE)
分类数据的编码和值:cut_F.codes; cut_F.categories
5. 表格变换
# 二维数据框转化为一维数据框:
pd.melt(df, id_vars='X', var_name='year', value_name = 'value')
# 一维变二维:
df_melt.pivot_table(index="X", columns="year", values="value")
df_pivot=df_pivot_reset_index()
变量的变换:
对某列进行加减产生新的列:
df_melt["value2"] = df_melt["value"]*2
#使用python的transform:
df_melt['value2']=df_melt.trasform(lambda x: x['value']*2 if x['year'] == '2011' else x['value'], axis=1)
#表格的排序:
dat_sort3 = df_melt_sort_values(by=['year', 'value'], ascending =True)
#表格的拼接:dat_cbind=pd.concat([df1, df2], axis=1) # axis =0 纵轴,axis=1横轴
#添加行: dat_rbind =pd.concat([df1,df2], axis=0)
dat_rbind=df1.append(df3)
#删除行或者列:df1.drop(labels='y', axis=1, inplace=True)
# labels 是要删除行或者列的名字
6. 表格的分组操作
6.1 多列同时进行运算
df['2010_2011'] = df.apply(lambda x: x['2010'] + 2 * x['2011'], axis=1)
6.2 分组操作
df_group_mean1 = df_melt.groupby('year').mean()
df_group_mean2 = df_melt.groupby(["year", "x"], as_index=False).mean()
df_group_sum=df_melt.groupby('year').sum()
df_group_std= df_melt.groupby('year').std()
6.3 分组聚合
aggregate()函数结合groupby可以实现SQL中分组聚合运算
df_group2 = df_melt.groupby(['x','year']).aggregate(np.mean, np.median)
df_group3=df_melt.groupby(['x', 'year']).agg({'value': {"mean": np.mean, 'median':np.median}})
df_melt['percentage'] = df_melt.groupby('x')['value'].transform(lambda x: x/x.sum())
df_filter = df_melt.groupby('x').fillter(lambda x: x['value'].mean() >4)
7. 数据导入和导出
pd.read.csv(); pd.to_csv()
pd.read_excel('data.xlsx', sheetname='sheetname', header=0)
df.to_excel(excel_writer, sheet_name = 'sheetname', index=False)
8. 缺失值处理
#直接删除:
df_Na1= df.dropna(axis=0)
#临近元素填充:
df_Na2 = df.fillna(method='ffill')
#使用指定元素:
df_na3=df.fillna(2)