索引操作
- 一个简单的索引操作(之前博客里也写过,这次简单地复习一下)
import pandas as pd
#读取csv文件
df = pd.read_csv('./data/titanic.csv')
#定位两个列的名字,取前10个数
df[['Age','Fare']][:10]
- iloc 用position来去定位
#遍历索引为0的整个一行数据
df.iloc[0]
#索引切片取0-4行的1,2列的数据
df.iloc[:5,1:3]
- loc 用label来去定位
#定义名字"Name"的索引,并且通过"Name"值来打印数据
df.set_index('Name')
df.loc('Allen, Mr. William Henry')
#在'Name'值为Allen, Mr. William Henry的数据中,取出'Fare'单独的数据
df.loc['Allen, Mr. William Henry','Fare']
#输出
8.05
#'Name'值也可以作为切片
df.loc['Heikkinen, Miss. Laina':'Allen, Mr. William Henry',:]
#索引赋值操作
df.loc['Heikkinen, Miss. Laina','Fare'] = 1000
df.head()
- 布尔索引
#布尔索引示例
df['Fare'] > 40
#布尔类型传入DataFrame中
df[df['Fare'] > 40][:5]
#对'Sex'为'male'的值取前5个
df[df['Sex'] == 'male'][:5]
#对'Sex'为'male'的Age求平均数
df.loc[df['Sex'] == 'male','Age'].mean()
#输出
30.72664459161148
#统计Age大于70的个数
(df[df['Age']>70]).sum()
#输出
5
Groupby操作
- groupby函数类似于hadoop中hive sql语句中的groupby。主要是用于数据的分组及组内的运算。
- 简单示例
import pandas as pd
#构建一个DataFrame
df = pd.DataFrame({'key':['A','B','C','A','B','C','A','B','C'],
'data':[0,5,10,5,10,15,10,15,20]})
#求出A、B、C的总和
for key in ['A','B','C']:
print (key,df[df['key'] == key].sum())
这样做是不是觉得很麻烦而且效果也很差?这是我们就可以用groupby函数,可以对他进行汇总求和。
df.groupby('key').sum()
- groupby还可以指定numpy的操作
import numpy as np
#求出平均值
df.groupby('key').aggregate(np.mean)
- 继续对之前csv数据进行操作
#根据Sex分组,分别求出male与female年龄的总数(Age为空则不会被记录进去)
df.groupby('Sex')['Age'].count()
#输出
Sex
female 261
male 453
Name: Age, dtype: int64
#根据Sex分组,分别求出male与female年龄的平均值
df.groupby('Sex')['Age'].mean()
#输出
Sex
female 27.915709
male 30.726645
Name: Age, dtype: float64
#根据Sex分组,算出Survived概率
df.groupby('Sex')['Survived'].mean()
#输出
Sex
female 0.742038
male 0.188908
Name: Survived, dtype: float64