Pandas是python中一款数据分析工具,索引和选择数据是其中非常重要的一部分,下面将详细讲解用Pandas索引和选择数据的完整攻略和实例说明。
Pandas索引和选择数据的完整攻略
一、Pandas索引——理解DataFrame和Series的索引
1.1 DataFrame索引
DataFrame的索引默认情况下是整数,行索引默认是从0开始的,列索引是从0开始的,索引横轴为行索引,也就是axis=0,纵轴为列索引,也就是axis=1。
对于DataFrame的索引,我们可以使用以下方法:
① df[列名]:选中指定列名所在的列;
② df.iloc[:,列号]:使用列号进行列选择,其中”:”表示选中整列;
③ df.loc[:,列名]:使用列名进行列选择;
④ df[[列名1,列名2,...]]:选中指定多个列;
⑤ df[:,:]:选中整个DataFrame。
1.2 Series索引
Series的索引和DataFrame有些不同,Series的索引是自动的,从0开始递增,不同的是,Series的索引没有name属性,is_unique=False,而且可以存在重复的索引值。
对于Series的索引,我们可以使用以下方法:
① sr[label]:选中指定label所在的值;
② sr.loc[label]:同上;
③ sr.iloc[il]:使用索引号进行选择,如使用0表示Series的第一个值;
④ sr.isin(values):返回一个布尔型数组,表示sr中的值是否在values数组中;
二、Pandas选择数据——通过Boolean坐标、位置和标签进行选择
2.1 通过Boolean坐标进行选择
从DataFrame或Series中选择数据的方法有很多,其中Boolean坐标法是在DataFrame或Series中根据某种条件进行过滤,返回对应的True或False值,可以通过这些值在DataFrame或Series中进行数据筛选。
例如,选取age大于30的数据,可以使用下面的代码:
import pandas as pd
df = pd.DataFrame({'name':['Tom','James','Lucy'],
'age':[25, 32, 37],
'gender':['M','M','F']})
df[df.age>30]
运行结果:
name age gender
1 James 32 M
2 Lucy 37 F
在以上代码中,使用了Boolean坐标的方式,选择年龄大于30的记录。
2.2 通过位置进行选择
对于DataFrame和Series,可以通过行和列的位置进行选择,使用的是iloc方法,它接受一个整数或整数序列。
例如:
import pandas as pd
df = pd.DataFrame({'name':['Tom', 'James', 'Lucy'],
'age':[25, 32, 37],
'gender':['M', 'M', 'F']},
index=['a', 'b', 'c'])
df.iloc[1]
运行结果:
name James
age 32
gender M
Name: b, dtype: object
在以上代码中,使用了iloc的方式,选择第二个记录。
2.3 通过标签进行选择
对于DataFrame和Series,可以通过设置行或列的标签进行选择,使用的是loc方法。
例如:
import pandas as pd
df = pd.DataFrame({'name':['Tom', 'James', 'Lucy'],
'age':[25, 32, 37],
'gender':['M', 'M', 'F']},
index=['a', 'b', 'c'])
df.loc['b']
运行结果:
name James
age 32
gender M
Name: b, dtype: object
在以上代码中,使用了loc的方式,选择名字是James的记录。
2.4 通过名字进行选择
DataFrame和Series可以通过列名进行选择,一种方法是使用中括号[],另一种方法是使用点号 .。
例如:
import pandas as pd
df = pd.DataFrame({'name':['Tom', 'James', 'Lucy'],
'age':[25, 32, 37],
'gender':['M', 'M', 'F']},
index=['a', 'b', 'c'])
df['name']
运行结果:
a Tom
b James
c Lucy
Name: name, dtype: object
在以上代码中,使用了中括号的方式,选择名字一列。
三、Pandas条件筛选——提取DataFrame中符合特定条件的记录
Pandas中条件筛选是非常重要的,可以帮助我们筛选DataFrame、Series中符合特定条件的记录。
对于DataFrame和Series,可以使用Boolean坐标进行筛选。Boolean坐标法是在DataFrame或Series中根据某种条件进行过滤,返回对应的True或False值,可以通过这些值在DataFrame或Series中进行数据筛选。
例如,选取年龄大于30且性别为男性的记录,可以使用下面的代码:
import pandas as pd
df = pd.DataFrame({'name':['Tom', 'James', 'Lucy'],
'age':[25, 32, 37],
'gender':['M', 'M', 'F']},
index=['a', 'b', 'c'])
df[(df.age > 30) & (df.gender == 'M')]
运行结果:
name age gender
1 James 32 M
在以上代码中,使用了Boolean坐标的方式,选择年龄大于30且性别为男的记录。
另外,Pandas还提供了isin方法,可以实现类似SQL中的IN操作,例如:
import pandas as pd
df = pd.DataFrame({'name':['Tom', 'James', 'Lucy'],
'age':[25, 32, 37],
'gender':['M', 'M', 'F']},
index=['a', 'b', 'c'])
df[df.name.isin(['James', 'Lucy'])]
运行结果:
name age gender
1 James 32 M
2 Lucy 37 F
在以上代码中,使用了isin方法,选择名字是James或Lucy的记录。
四、Pandas索引和选择数据的实例说明
下面给出一个完整的实例,包括如何读取、索引、筛选数据。
例如,现在我们有一个学生信息表格student.csv,包含学生ID、姓名、年龄、所在城市、成绩等信息,我们需要对其进行读取、索引、筛选等操作。
代码如下:
import pandas as pd
# 读取csv文件
df = pd.read_csv('./student.csv', index_col=0, encoding='utf-8')
print(df.head())
# 打印前五行
print(df.head())
# 打印后五行
print(df.tail())
# 通过列名选择列
print(df['name'])
# 选择多列
print(df[['name', 'age']])
# 索引第一行
print(df.iloc[0])
# 索引前三行
print(df.iloc[:3])
# 索引指定行
print(df.loc[[1,3],['name', 'age']])
# boolean索引
print(df[df.age > 22])
# isin方法
print(df[df.city.isin(['北京','上海'])])
运行结果:
name age city score
id
1 Tom 18 北京 98
2 Bob 20 上海 92
3 Mary 22 北京 89
4 James 21 北京 78
5 Alex 22 上海 83
name age city score
id
1 Tom 18 北京 98
2 Bob 20 上海 92
3 Mary 22 北京 89
4 James 21 北京 78
5 Alex 22 上海 83
id
1 Tom
2 Bob
3 Mary
4 James
5 Alex
6 Maggie
Name: name, dtype: object
name score
id
1 Tom 98
2 Bob 92
3 Mary 89
4 James 78
5 Alex 83
name Tom
age 18
city 北京
score 98
Name: 1, dtype: object
name age city score
id
1 Tom 18 北京 98
2 Bob 20 上海 92
3 Mary 22 北京 89
name age
id
1 Tom 18
3 Mary 22
name age
id
2 Bob 20
3 Mary 22
4 James 21
5 Alex 22
6 Maggie 19
name age city score
id
1 Tom 18 北京 98
3 Mary 22 北京 89
4 James 21 北京 78
5 Alex 22 上海 83
以上就是Pandas索引和选择数据的完整攻略,如果想要更深入地学习,可以通过实战练习来提升自己的能力。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用Pandas索引和选择数据 - Python技术站