动手学数据分析_第一章:第二节:Pandas基础

本文介绍了如何使用Pandas进行数据分析,包括定义DataFrame和Series,查看、操作列,筛选特定条件,运用loc和iloc进行精确索引,以及实践数据筛选逻辑。通过实例学习了数据预处理技巧,如删除多余列和隐藏部分列,以及利用条件选择展示数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 之前关于数据分析的学习是用到什么查阅什么,没有系统的学习过,最近通过这个机会,再复习下关于之前学过的数据分析的一些知识,并完善一些数据分析的方法.最近一系列的数据分析的内容来源于DataWhale开源.涉及到的数据集等可从github(https://github.com/datawhalechina/hands-on-data-analysis)上获取到.

复习:数据分析的第一步,加载数据我们已经学习完毕了。当数据展现在我们面前的时候,我们所要做的第一步就是认识他,今天我们要学习的就是了解字段含义以及初步观察数据

本节涉及的知识点

  • 1.如何定义DataFrame和Series
  • 2.查看列、删除列
  • 3.对某一列的数据进行筛选
  • 4.loc和iloc
  • 5.详情看目录

1 第一章:数据载入及初步观察

1.4 知道你的数据叫什么

我们学习pandas的基础操作,那么上一节通过pandas加载之后的数据,其数据类型是什么呢?

开始前导入numpy和pandas

import numpy as np
import pandas as pd

1.4.1 任务一:pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子🌰[开放题]

#写入代码

# Series以字典形式传入
series = pd.Series({'zhangsan':188,'lisi':150,'wangwu':178})
print(type(series))
series
<class 'pandas.core.series.Series'>





zhangsan    188
lisi        150
wangwu      178
dtype: int64
data = {
    'name':['zhangsan','lisi','wangwu'],
    'age':[18,38,50],
    'height':[188,150,178]
}
dataframe = pd.DataFrame(data)
dataframe
nameageheight
0zhangsan18188
1lisi38150
2wangwu50178

1.4.2 任务二:根据上节课的方法载入"train.csv"文件

#写入代码

df = pd.read_csv("train.csv")
print(df.shapee)
df.head(3)
(891, 12)
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS

也可以加载上一节课保存的"train_chinese.csv"文件。通过翻译版train_chinese.csv熟悉了这个数据集,然后我们对trian.csv来进行操作

1.4.3 任务三:查看DataFrame数据的每列的名称

#写入代码


df.columns
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')

1.4.4任务四:查看"Cabin"这列的所有值[有多种方法]

#写入代码

df['Cabin']  # df['Cabin'].values|
0       NaN
1       C85
2       NaN
3      C123
4       NaN
       ... 
886     NaN
887     B42
888     NaN
889    C148
890     NaN
Name: Cabin, Length: 891, dtype: object
#写入代码

# 这个之前没用过
df.Cabin
0       NaN
1       C85
2       NaN
3      C123
4       NaN
       ... 
886     NaN
887     B42
888     NaN
889    C148
890     NaN
Name: Cabin, Length: 891, dtype: object

1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除

经过我们的观察发现一个测试集test_1.csv有一列是多余的,我们需要将这个多余的列删去

#写入代码 -- 读取数据

test_1 = pd.read_csv("test_1.csv")
print(test_1.shape) # 14列数据 , train.csv有12列
test_1.head(3)
(891, 14)
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarkeda
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS100
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C100
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS100
#写入代码 -- 删除 'a' 这一列

test_1.drop(columns=['a'],inplace=True)
print(test_1.shape)
test_1.head(3)
(891, 13)
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS

【思考】还有其他的删除多余的列的方式吗?

# 思考回答

del test_1['a'] # 记住! 这种之前没用过!

1.4.6 任务六: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素

#写入代码

# 这里不加columns=[] 也可以!
df.drop(['PassengerId','Name','Age','Ticket'],axis=1).head(3)
SurvivedPclassSexSibSpParchFareCabinEmbarked
003male107.2500NaNS
111female1071.2833C85C
213female007.9250NaNS

【思考】对比任务五和任务六,是不是使用了不一样的方法(函数),如果使用一样的函数如何完成上面的不同的要求呢?

【思考回答】

如果想要完全的删除你的数据结构,使用inplace=True,因为使用inplace就将原数据覆盖了,所以这里没有用

1.5 筛选的逻辑

表格数据中,最重要的一个功能就是要具有可筛选的能力,选出我所需要的信息,丢弃无用的信息。

下面我们还是用实战来学习pandas这个功能。

1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。

#写入代码

df['Age']<10 # 单纯输入 df["Age"]<10 是在做判断 ,并返回True/False
0      False
1      False
2      False
3      False
4      False
       ...  
886    False
887    False
888    False
889    False
890    False
Name: Age, Length: 891, dtype: bool
df[df['Age']<10].head(3) # 在套一个df[]是将为True的值所对应的行筛选出来
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
7803Palsson, Master. Gosta Leonardmale2.03134990921.075NaNS
101113Sandstrom, Miss. Marguerite Rutfemale4.011PP 954916.700G6S
161703Rice, Master. Eugenemale2.04138265229.125NaNQ

1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage

#写入代码

# df[df['Age']>10 & df['Age']<50]   --  这样写不对,记住应该怎么写!!
# 这两个判别条件 要分别 加上()
midage = df[(df['Age']>10) & (df['Age']<50)]
midage.head(3)
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS

【提示】了解pandas的条件筛选方式以及如何使用交集和并集操作

1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来

#写入代码

# 第一步 : 重置行索引
midage = midage.reset_index()
midage.loc[[100],['Pclass','Sex']]
PclassSex
1002male
midage.iloc[[100],[3,5]]
PclassSex
1002male

补充 : loc 和 iloc

  • loc 是按照索引的值进行筛选
  • iloc 是按照索引的下标进行筛选 – 看上面两个就能看出来
  • 此外 在筛选的时候,可以进行如下筛选方式
midage.iloc[1,1] #获取第二行、第二列的值
2
midage.iloc[1:3,1:3]#获取从第二行,第二列开始的值 : 左闭右开!! ==>  获取不到 3 和 Pclass
PassengerIdSurvived
121
231
midage.loc[1,'PassengerId']#获取第二行(数值型)、第二列(字符串)对应的值
2
midage.loc[1:5,'PassengerId':'Sex'] # 这时候能获取到 5 和 Sex
PassengerIdSurvivedPclassNameSex
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female
2313Heikkinen, Miss. Lainafemale
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female
4503Allen, Mr. William Henrymale
5913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female

【提示】在抽取数据中,我们希望数据的相对顺序保持不变,用什么函数可以达到这个效果呢?

1.5.4 任务四:使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

#写入代码

midage.loc[[100,105,108],["Pclass","Name","Sex"]]
PclassNameSex
1002Byles, Rev. Thomas Roussel Davidsmale
1053Cribb, Mr. John Hatfieldmale
1083Calic, Mr. Jovomale

1.5.5 任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

#写入代码

midage.iloc[[100,105,108],[3,4,5]]
PclassNameSex
1002Byles, Rev. Thomas Roussel Davidsmale
1053Cribb, Mr. John Hatfieldmale
1083Calic, Mr. Jovomale

【思考】对比ilocloc的异同

  • 就在上面刚刚总结le
# 补充 : 一个新的可能
# 说明了 加上[] 就能选取某几行/几列的数据  ,不加[]用 : 的方式可以回去 : 两侧之间的所有行/列的数据
midage.iloc[100:108,[3,4,5]]
PclassNameSex
1002Byles, Rev. Thomas Roussel Davidsmale
1011Pears, Mrs. Thomas (Edith Wearne)female
1023van Billiard, Mr. Austin Blylermale
1033Gilnagh, Miss. Katherine "Katie"female
1043Corn, Mr. Harrymale
1053Cribb, Mr. John Hatfieldmale
1062Watt, Mrs. James (Elizabeth "Bessie" Inglis Mi...female
1073Bengtsson, Mr. John Viktormale

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值