1.简介
pandas和numpy是用Python做数据分析最基础且最核心的库
2.缩写解释 & 库的导入
df —- 任意的pandas DataFrame(数据框)对象
s —- 任意的pandas Series(数组)对象
1 | import pandas as pd # 导入pandas库并简写为pd |
3.数据的导入
1 | pd.read_csv(filename) # 导入csv格式文件中的数据 |
4.数据的导出
1 | df.to_csv(filename) # 将数据框 (DataFrame)中的数据导入csv格式的文件中 |
5.创建测试对象
1 | pd.DataFrame(np.random.rand(10,5)) # 创建一个5列10行的由随机浮点数组成的数据框 DataFrame |
1 | //# 从一个可迭代的对象 my_list 中创建一个数据组 |
1 | import pandas as pd |
6.数据的查看与检查
1 | df.head(n) # 查看数据框的前n行 |
1 | # 将字符型转为浮点数 |
7.数据的选取
1 | df[col] #以数组series形式返回选取的列 |
1 | df[[col1,col2]] # 以新的数据框(DataFrame)的形式返回选取的列 |
1 | s.iloc[0] #按照位置选取 |
1 | s.loc['index_one'] # 按照索引选取 |
1 | df.iloc[0,:] # 选取第一行 |
1 | df.iloc[0,0] # 选取第一行的第一个元素 |
1 | euro.iloc[: , :-3] # Select all columns except the last 3 |
1 | # .loc is another way to slice, using the labels of the columns and indexes |
8.数据的清洗
1 | del crime['Total'] |
1 | df.columns = ['a','b'] # 重命名数据框的列名称 |
1 | pd.isnull() # 检查数据中空值出现的情况,并返回一个由布尔值(True,Fale)组成的列 |
1 | pd.notnull() # 检查数据中非空值出现的情况,并返回一个由布尔值(True,False)组成的列 |
1 | df.dropna() # 移除数据框 DataFrame 中包含空值的行 |
1 | df.dropna(axis=1) # 移除数据框 DataFrame 中包含空值的列 |
1 | df.dropna(axis=1,thresh=n) # 移除数据框df中空值个数不超过n的行 |
1 | df.fillna(x) # 将数据框 DataFrame 中的所有空值替换为 x |
1 | s.fillna(s.mean()) #将所有空值替换为平均值 |
1 | s.astype(float) # 将数组(Series)的格式转化为浮点数 |
1 | s = pd.Series([1,3,5,np.nan,7,9,9]) #将数组(Series)中的所有1替换为'one' |
1 | s = pd.Series([1,3,5,np.nan,7,9,9]) |
1 | df.rename(columns=lambda x: x + 2) # 将全体列重命名 |
1 | df.rename(columns={'old_name': 'new_ name'}) # 将选择的列重命名 |
1 | df.set_index('column_one') # 改变索引 |
1 | df.rename(index = lambda x: x+ 1) # 改变全体索引 |
9.数据的过滤(filter),排序(sort)和分组(groupby)
1 | # Reset the index so it begins with 0 again |
1 | apple.sort_index(ascending = True).head() |
1 | euro12[euro12.Team.str.startswith('G')] #Select the teams that start with G |
1 | df[df[col] > 0.5] # 选取数据框df中对应行的数值大于0.5的全部列 |
1 | df[(df[col] > 0.5) & (df[col] < 0.7)] # 选取数据框df中对应行的数值大于0.5,并且小于0.7的全部列 |
1 | df.sort_values(col1) # 按照数据框的列col1升序(ascending)的方式对数据框df做排序 |
1 | df.sort_values(col2,ascending=False) # 按照数据框的列col2降序(descending)的方式对数据框df做排序 |
1 | df.sort_values([col1,col2],ascending=[True,False]) # 按照数据框的列col1升序,col2降序的方式对数据框df做排序 |
1 | df.groupby(col) # 按照某列对数据框df做分组 |
1 | df.groupby([col1,col2]) # 按照列col1和col2对数据框df做分组 |
1 | df.groupby(col1)[col2].mean() # 按照列col1对数据框df做分组处理后,返回对应的col2的平均值 |
1 | df.groupby(col1)[col2].mean() # 按照列col1对数据框df做分组处理后,返回对应的col2的平均值 |
1 | //计算每一单的平均金额 |
1 | df.pivot_table(index=col1,values=[col2,col3],aggfunc=mean) # 做透视表,索引为col1,针对的数值列为col2和col3,分组函数为平均值 |
1 | df.groupby(col1).agg(np.mean) # 以col1分组,分组函数为平均值 |
1 | df.apply(np.mean) # 对数据框df的每一列求平均值 |
1 | df.apply(np.max,axis=1) # 对数据框df的每一行求最大值 |
10.数据的连接(join)与组合(combine)
1 | df1.append(df2) # 在数据框df2的末尾添加数据框df1,其中df1和df2的列数应该相等 |
1 | df1.join(df2,on=col1,how='inner') # 对数据框df1和df2做内连接,其中连接的列为col1 |
1 | pd.merge(data1, data2, on='subject_id', how='inner') #Merge only the data that has the same 'subject_id' on both data1 and data2 |
11.数据的统计
1 | df.describe() # 得到数据框df每一列的描述性统计 |
1 | df.corr() # 得到数据框df中每一列与其他列的相关系数 |
1 | df.count() # 得到数据框df中每一列的非空值个数 |
1 | df.max() # 得到数据框df中每一列的最大值 |
1 | df.min() # 得到数据框df中每一列的最小值 |
1 | df.median() # 得到数据框df中每一列的中位数 |
1 | df.std() # 得到数据框df中每一列的标准差 |