【DW组队学习—动手学数据分析】第一章:第二节pandas基础-课程学习

本文是数据分析入门课程的一部分,详细介绍了pandas的DateFrame和Series数据类型,包括如何加载数据、查看列名、筛选数据以及删除多余列。通过一系列任务,如加载CSV文件、观察"Cabin"列、删除特定列、筛选特定条件数据,帮助读者掌握pandas基本操作。

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

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

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

1.4 知道你的数据叫什么

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

开始前导入numpy和pandas

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

Series

Series是一个一维标记数组,能够保存任何数据类型(整数、字符串、浮点数、Python 对象等)。轴标签统称为index。
创建系列的基本方法是调用:
s = pd.Series(data, index=index)

  • 运算

    • s1+s2 #索引相同的元素相加,不同的则补充Nan
    • s * 2 #所有元素 * 2
    • s+1 #所有元素+1
  • 常用方法

    • s.index #查看索引
    • s.values #查看数值
    • s.isnull() #查看为空的,返回布尔型
    • s.notnull()
    • s.sort_index() #按索引排序
    • s.sort_values() #按数值排序
#写入代码
#创建Series
s = pd.Series(['a','b','c','d']) #默认索引
s
0    a
1    b
2    c
3    d
dtype: object
s = pd.Series(np.random.randn(5), index=["a", "b", "c", "d", "e"]) #指定索引
s
a    0.174499
b    0.826603
c   -0.504941
d    1.154826
e    0.194536
dtype: float64
s = pd.Series({"b": 1, "a": 0, "c": 2}) #指定索引
s
b    1
a    0
c    2
dtype: int64
s = pd.Series(5.0, index=["a", "b", "c", "d", "e"]) #相同值
s
a    5.0
b    5.0
c    5.0
d    5.0
e    5.0
dtype: float64
#我们举的例子
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64

DataFrame

dataframe是非常常见的一个表格型数据结构,每一列可以是不同的数值类型,有行索引、列索引。提到它就会自然想到Pandas这个包。平常用Python处理xlsx、csv文件,读出来的就是dataframe格式。
DataFrame 接受多种不同类型的输入:

  • 一维数组、列表、字典或系列的字典
  • 二维 numpy.ndarray
  • 结构化或记录ndarray
  • 一种 Series
  • 其他 DataFrame
#我们举的例子
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
example_2 = pd.DataFrame(data)
example_2
stateyearpop
0Ohio20001.5
1Ohio20011.7
2Ohio20023.6
3Nevada20012.4
4Nevada20022.9
5Nevada20033.2
d = {
    "one": pd.Series([1.0, 2.0, 3.0], index=["a", "b", "c"]),
    "two": pd.Series([1.0, 2.0, 3.0, 4.0], index=["a", "b", "c", "d"]),
    "three": pd.Series([1.0, 2.0, 3.0, 5.0], index = ["a", "b", "c", "e"])
}
df = pd.DataFrame(d)
df
onetwothree
a1.01.01.0
b2.02.02.0
c3.03.03.0
dNaN4.0NaN
eNaNNaN5.0

【VC小注】
可以看到,当规定的index数量、名称不一致时,会用NaN补齐表格

df = pd.DataFrame(d, index = ["b", "a", "e"], columns=["two", "three"])
df
twothree
b2.02.0
a1.01.0
eNaN5.0

【VC小注】
可以通过规定index、columns选取行/列组成表格

1.4.2 任务二:根据上节课的方法载入"train.csv"文件
#写入代码
data = pd.read_csv("train.csv")
data.head(5)
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
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS

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

1.4.3 任务三:查看DataFrame数据的每列的名称
#写入代码
data.columns
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')
1.4.4任务四:查看"Cabin"这列的所有值[有多种方法]

【总结】查看列值的方法:
法一:df[列名]
法二:df.列名

#写入代码
data["Cabin"].head(5)
0     NaN
1     C85
2     NaN
3    C123
4     NaN
Name: Cabin, dtype: object
#写入代码
data.Cabin.head(5)
0     NaN
1     C85
2     NaN
3    C123
4     NaN
Name: Cabin, dtype: object
1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除

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

#写入代码
df_test = pd.read_csv("test_1.csv")
df_test.columns
Index(['Unnamed: 0', 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
       'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked', 'a'],
      dtype='object')

【总结】删除列:
法一:del df[列名]
法二:df.columns.delete(删除列的位置),若删除多列用[列1位置,……]
【注】 该方法不是真的删除了指定列,而是在输出结果上删除了指定列名,指定列数据仍然存在

#写入代码
del df_test[ 'a']
df_test.columns
Index(['Unnamed: 0', 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
       'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')
df_test.columns.delete(-1)
Index(['Unnamed: 0', 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
       'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')
df_test.columns
Index(['Unnamed: 0', 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
       'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked', 'a'],
      dtype='object')
1.4.6 任务六: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素

从行或列中删除指定的标签,采用以下语句:
DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=‘raise’)

#写入代码
data.drop(columns = ['PassengerId','Name','Age','Ticket'])
data.head(5)
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
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS

可以看到,此处依然是全部列数,说明train_data本质并没有发生变化
drop操作后直接观察可以看到隐藏指定列的数据

data.drop(columns = ['PassengerId','Name','Age','Ticket']).head(5)
SurvivedPclassSexSibSpParchFareCabinEmbarked
003male107.2500NaNS
111female1071.2833C85C
213female007.9250NaNS
311female1053.1000C123S
403male008.0500NaNS

如果想要完全的删除数据,使用inplace=True ,因为使用inplace就将原数据覆盖了

1.5 筛选的逻辑

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

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

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

df[筛选条件]

#写入代码
data[data["Age"]<10].head(5)
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
7803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS
101113Sandstrom, Miss. Marguerite Rutfemale4.011PP 954916.7000G6S
161703Rice, Master. Eugenemale2.04138265229.1250NaNQ
242503Palsson, Miss. Torborg Danirafemale8.03134990921.0750NaNS
434412Laroche, Miss. Simonne Marie Anne Andreefemale3.012SC/Paris 212341.5792NaNC
1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage

使用 & 表示且

#写入代码
midage = data[(data["Age"]>10) & (data["Age"]<50)]
midage.head(5)
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
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来

【总结】索引:
法一:使用行名和列名,df.loc[[行名], [列名]]
法二:使用行序和列序,df.iloc[[行索引], [列索引]]

#写入代码
midage.loc[100,["Pclass", "Sex"]]
Pclass         3
Sex       female
Name: 100, dtype: object

但是,因为midage是对原表筛选得到的,它的行名依然是原表的行名,即其与现表的索引不一定对应,故要对行索引进行更新,使用如下命令:
df.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=’’)
其中,drop=True时,覆盖原索引进行更新;drop=False时,将原索引作为表格的一列数据,增加新索引

midage = midage.reset_index(drop = True)
midage
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
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
.......................................
57188603Rice, Mrs. William (Margaret Norton)female39.00538265229.1250NaNQ
57288702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
57388811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
57489011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
57589103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

576 rows × 12 columns

midage.loc[100,["Pclass","Sex"]]
Pclass       2
Sex       male
Name: 100, dtype: object
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],[2,3,4]]
PclassNameSex
1002Byles, Rev. Thomas Roussel Davidsmale
1053Cribb, Mr. John Hatfieldmale
1083Calic, Mr. Jovomale
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值