一、Pandas概述与Pandas基本操作
1.1 Pandas概述
Pandas 数据分析与处理库
import pandas as pd
df = pd.read_csv('filename')
df.head(6) #显示前6行数据
df.info() #显示相关信息,列信息、行数、类型、内存
df.index #显示索引信息
df.columns()
df.values()
1.2 Pandas基本操作
data={"country":["China","US","UK"],
"population":[100,3,1]}
df_data = pd.DataFrame(data)
df['country'] #取某一列数据
series: dataframe 中的一行/列
df.set_index('column name')
df['index的值'] #就可以取得对应的行
age = df['Age']
age * 5
age.min()
age.max()
age.mean()
df.describe() #整个dataframe中的数值列各种统计信息 8个
二、Pandas索引与groupby操作
2.1 Pandas索引
df['age'][:5] 年龄列前5行数据
df[['age','fare']][:5] age和fare列的前5行数据
.loc 用label定位
.iloc 用位置定位
df.iloc[0:5] 第0-5个数据
df.iloc[0:5, 1:3] 第0-5个数据 的第1,2列
df.set_index('Name') 使用Name做索引
df.loc['my name'] my name对应的列数据
df.loc['my name', 'fare']
df.loc['my name': 'youre name'] 两个名字之间的数据
bool类型的索引
df[df['fare'] > 40] 显示fare>40的行数据
df.loc[df['sex'] == 'male','age'].mean() 男的平均年龄
2.2 groupby操作
df.groupby('key).sum()
df.groupby('key).aggregate(np.mean()
df.groupby('Sex‘)['age'].mean()
三、数值运算与对象操作
3.1 数值运算
df.sum() 按行求和
df.sum(axis =1 ) 按行求和
df.min()
df.max()
df.mean()
df.median() 中位数
二元统计
df.cov() 协方差
df.corr() 相关系数
df['age'].value_counts() 每个值的个数 默认降序排列
df['age'].value_counts(ascending = True) 升值排序
df['age'].value_counts(ascending = True, bins = 5) 把年龄值分组
df['age'].count() 记数
帮助
print(help(pd.value_counts))
3.2 对象操作
Series对象的增删改查
import pandas as pd
data = [1, 2, 3]
index = ['a','b','c']
s = pd.Series(data = data, index = index)
#### 查
s[0] #第0行数据
s[0:3] #第0,1行数据
mask = [True, False, True]
s[mask]
s.loc['a']
s.iloc[1]
### 改
s1 = s.copy()
s1['a']=100
s1.replace(to_replace = 100, value =101, inplace=False) #inplace=False原位置不修改
s1.index()
s1.index = ['a','b','d'] #修改索引
s1,rename(index = {'a','A'},inplace=True) #把索引a 改为A
### 增加
s3 = s1.append(s2)
s3['j'] = 200
s3 = s1.append(s2, ignor_index= True) 忽略索引,false保留索引
### 删除
del s1.['A'] #删除A列
s1.drop(['b','d'],inreplace=True) #删除b d行
DateFrame对象的增删改查
data=[[1,2,3], [4,5,6]]
index = ['r1','r2']
columns=['c1','c2','c3']
df = pd.DataFrame(data=data, index = index, coloumns=cloumns)
df['c1']
df.loc['r1']
df.iloc[0]
df.loc['r1']['c1']=100
df.index = ['k1','k2'] # 改索引
## 增加数据
df['r3'] = [1,2,3]
df3 = pd.concat([df, df2] ,axis=0) #连接操作 这是默认的
df3['c4'] = [6,7] #增加c4列
pd.concat([df1,df2],axis =1 ) 列连接,注意df1,df2的index值要一致
### 删除操作
df.drop(['r1'], axis = 0, inplace = True) 删除r1行
del df1['c1'] #删除k1列
df1.drop(['c2','c3'],axis=1,inplace= True) #删c2,c3列
四、merge操作、显示设置与数据透视表
4.1 merge操作
pd.merge(left,right,on=‘key’) 把left 和 right以key为连接合并,如果有相同的列名,刚列名_x 列名_y
pd.merge(left,right,on=[‘key1’,'key2']) 交集
pd.merge(left,right,on=[‘key1’,'key2'],how='outer') 并集
pd.merge(left,right,on=[‘key1’,'key2'],how='outer', indicator=True) 生成出来的数据多出一列_merge, 值为both left_only right_only
pd.merge(left,right,on=[‘key1’,'key2'],how='left') 以左表为基准
pd.merge(left,right,on=[‘key1’,'key2'],how='right') 以右表为基准
4.2 显示设置
pd.get_option('display.max_rows') # 获得显示最大行数
pd.set_option('display.max_rows',100) # 设置显示最大行数
pd.get_option('display.max_colums') # 获得显示最大列数
pd.get_option('display.max_colwidth') # 获得显示字符串最大长度
pd.get_option('display.precision') # 获得显示字符串最大长度
# 都有对应的set_option函数
4.3 数据透视表
example_pivot = example.pivot(index='Category', columns='Month', values='Amount')
example_pivot.sum(axis = 1) #求和,按行求和,Category
example_pivot.sum(axis = 0) #求和,按列求和,Month
#titanic.csv数据
df = pd.read_csv('./data/titanic.csv')
df.piovt_table (index='Sex', columns='Pclass', values='Fare') #默认是求平均值
df.piovt_table (index='Sex', columns='Pclass', values='Fare',aggfunc='max') #求最大值
df.piovt_table (index='Sex', columns='Pclass', values='Fare',aggfunc='count') #计数
df.crosstable(index=df['Sex'], columns=df['Pclass']) #结果与上面一样
df.piovt_table (index='Pclass', columns='Sex', values='Survived',aggfunc='mean') #统计不同性别在不同等级船舱的获救比例。
#统计未成年的获救比例
df['Underaged'] = df['Age'] < 18
df.piovt_table (index='Underaged', columns='Sex', values='Survived',aggfunc='mean')