python pandas快速上手教程,还不赶紧收藏一波

python pandas快速上手教程,还不赶紧收藏一波,第1张

python pandas快速上手教程,还不赶紧收藏一波

pandas tutorials
  • 1 使用pandas读取数据
    • 1.1 panda读取csv文件
    • 1.2 pandas显示读取的csv文件数据的开头几行 head(n)
    • 1.3 pandas显示读取的csv文件数据的结尾几行 tail(n)
    • 1.4 获取读取csv文件的头head(样本的属性)和所有样本的shape
    • 1.5 data_info.loc[n]取出指定的样本(第几行数据)
      • 1.5.1 pandas获取指定某一行的数据
      • 1.5.2 获取指定连续的多行数据
      • 1.5.3 获取指定不连续的多行数据
      • 1.5.4 pandas中常见的数据类型
    • 1.6 获取样本的某一列数据(所有样本的某一属性/特征值)
      • 1.6.1 获取指定的某一列数据
      • 1.6.2 获取指定的多列数据
      • 1.6.3 过滤出指定的某些列的数据
  • 2 自己定义pandas类型的数据 和 保存pandas数据
    • 2.1 通过字典定义一个Dateframe数据
    • 2.2 通过numpy的ndarray数组定义一个Dataframe数据
    • 2.3 把数据保存成csv文件
    • 2.4 把数据保存成xlsx文件
    • 2.5 pandas把数据保存其他更多格式
  • 3 对pandas的列进行计算等 *** 作
    • 3.1 获取某一列的数据进行 *** 作
      • 3.1.1 获取某一列的数据进行 *** 作
      • 3.1.2 获取某一列的数据进行 *** 作,并同步修改到整个读取的数据中
    • 3.2 对某两列数据合并到一起,并添加新的列
      • 3.2.1 对某两列的数据进行计算 *** 作
      • 3.2.2 把某两列进行一定组合,生成新的一列
    • 3.2 对某一列的数据进行归一化 *** 作
    • 3.3 查看计算某一列数据还有哪些常用的API
    • 3.4 对pandas的某一列数据进行排序
  • 4 使用pandas分析泰坦尼克号船员获救数据
    • 4.1 查看泰坦尼克号数据某一列缺失值NaN的个数
    • 4.2 求泰坦尼克船员数据年龄的平均值
      • 4.2.1 先过滤掉年龄列中的缺失值
      • 4.2.2 通过pandas内置的API直接计算某一列的平均值
    • 4.3 计算每个船舱等级船票的平均价格和平均年龄
      • 4.3.1 通过循环计算实现:计算每个船舱等级船票的平均价格
      • 4.3.2 通过pd的内置函数pivot_table():计算每个船舱等级船票的平均价格
      • 4.3.3 通过pd的内置函数pivot_table():计算每个船舱等级中的平均年龄
      • 4.3.4 计算一个量和其他多个量之间的关系
    • 4.4 丢弃含有NaN值的列 或 行
    • 4.5 定位获取到 表格中的某行或某列中的元素
    • 4.7 定义一个函数,然后使用appley()将其应用到我们的Dataframe数据结构上
  • 5 pandas中的另外一种数据结构Series

pandas主要用于做数据预处理。pandas底层是基于numpy实现的,因此numpy可能好几行才能实现的功能,pandas可能一行代码就能够搞定!

CSV:Comma-Separated Values是以逗号为分隔符的文件,你可以在电脑上用Excel软件直接打开

food_info.csv

  • 第一行是title(或 header)
  • 从第二行开始,每一行表示一个样本
  • 每列表示每种食物含有维生素、蛋白质等营养成分的含量,就相当于是样本的属性 或 特征
  • 我们就把自己的CSV文件当作一个矩阵或表格去理解就可以!

1 使用pandas读取数据 1.1 panda读取csv文件
import pandas
food_info = pandas.read_csv("food_info.csv")
print(type(food_info))
print(food_info.shape)
print(food_info.dtypes)
# print(help(pandas.read_csv))

输出结果:


(8618, 36)
NDB_No               int64
Shrt_Desc           object
Water_(g)          float64
Energ_Kcal           int64
Protein_(g)        float64
Lipid_Tot_(g)      float64
Ash_(g)            float64
Carbohydrt_(g)     float64
Fiber_TD_(g)       float64
Sugar_Tot_(g)      float64
Calcium_(mg)       float64
Iron_(mg)          float64
Magnesium_(mg)     float64
Phosphorus_(mg)    float64
Potassium_(mg)     float64
Sodium_(mg)        float64
Zinc_(mg)          float64
Copper_(mg)        float64
Manganese_(mg)     float64
Selenium_(mcg)     float64
Vit_C_(mg)         float64
Thiamin_(mg)       float64
Riboflavin_(mg)    float64
Niacin_(mg)        float64
Vit_B6_(mg)        float64
Vit_B12_(mcg)      float64
Vit_A_IU           float64
Vit_A_RAE          float64
Vit_E_(mg)         float64
Vit_D_mcg          float64
Vit_D_IU           float64
Vit_K_(mcg)        float64
FA_Sat_(g)         float64
FA_Mono_(g)        float64
FA_Poly_(g)        float64
Cholestrl_(mg)     float64
dtype: object

输出结果分析:

1、read_csv():读取后数据的类型为Dateframe,可以暂时理解为矩阵

2、shape结果:(8618, 36),表示有8618个样本(不包括第一行的header),36列,表示每个样本有36个属性/特征

3、print(food_info.dtypes):输出的是每一列数据的类型,object类型可以理解为是字符串string类型!

4、最后一个dtype: object表示是读取的整个数据的数据类型,我们使用的是dtypes查看的数据类型,而不是type

1.2 pandas显示读取的csv文件数据的开头几行 head(n)
import pandas
food_info = pandas.read_csv("food_info.csv")
food_info.head()
# food_info.head(3)

显示结果如下:

  • 默认food_info.head()是显示前五条数据
  • 也可以自己指定显示多少行数据
  • 注意:从最左边可以看出,样本的索引是从0开始的

1.3 pandas显示读取的csv文件数据的结尾几行 tail(n)
import pandas
food_info = pandas.read_csv("food_info.csv")
food_info.tail(4)

1.4 获取读取csv文件的头head(样本的属性)和所有样本的shape
import pandas
food_info = pandas.read_csv("food_info.csv")

# 使用columns属性,获取表格的列表
heads = food_info.columns
print(heads)
print(heads[0:3])
print(list(heads[0:3]))
print(food_info.shape)

输出结果:

1.5 data_info.loc[n]取出指定的样本(第几行数据)
  • 获取样本数据,即第几行数据,是通过样本的索引获取的
  • 样本的索引是从0开始的
1.5.1 pandas获取指定某一行的数据
  • 在pandas中取出某一行的数据是通过loc进行实现的
  • 注意:第一个样本的索引是从0开始的,并不包括开头的title
import pandas
food_info = pandas.read_csv("food_info.csv")
print(food_info.loc[0])

food_info.loc[8620]

注意:

如果索引超过了,就会报错:KeyError

1.5.2 获取指定连续的多行数据

1、如下,是取索引为3-6的样本数据,使用冒号隔开:

import pandas
food_info = pandas.read_csv("food_info.csv")
food_info.loc[3:6]

2、获取结果如下

1.5.3 获取指定不连续的多行数据

1、对于获取不连续的多行数据,需要传入对应行索引的列表,有两种写法:

import pandas
food_info = pandas.read_csv("food_info.csv")

# 写法1
# two_five_ten = [2,5,10] 
# food_info.loc[two_five_ten]

# 写法2
food_info.loc[[2, 5, 10]]

2、获取结果如下

1.5.4 pandas中常见的数据类型

1、pandas中常见的数据类型

  • object - 字符串string类型的值
  • int` - 整型值 integer values
  • float - 浮点值 float values
  • datetime - 时间值 time values
  • bool - 布尔值 Boolean values

2、查看数据的类型使用dtypes

print(food_info.dtypes)
1.6 获取样本的某一列数据(所有样本的某一属性/特征值)
  • 获取pandas的某一列数据,是根据列名进行获取的
1.6.1 获取指定的某一列数据

1、直接根据列名获取即可

import pandas

food_info = pandas.read_csv("food_info.csv")

# 先查看列名
print(food_info.columns)

ndb_col = food_info["NDB_No"]
print(ndb_col)

2、获取结果如下:

1.6.2 获取指定的多列数据

1、获取指定的多列数据,也是传入一个列名的列表即可

import pandas

food_info = pandas.read_csv("food_info.csv")

# 写法1:
# columns = ["Zinc_(mg)", "Copper_(mg)"]
# zinc_copper = food_info[columns]
# print(zinc_copper)

# 写法2:
zinc_copper = food_info[["Zinc_(mg)", "Copper_(mg)"]]
print(zinc_copper)

2、获取结果如下:

1.6.3 过滤出指定的某些列的数据

1、过滤出指定的某些列的数据

import pandas

food_info = pandas.read_csv("food_info.csv")

# 获取列名
print(food_info.columns)

# 获取前两行的样本数据
# print(food_info.head(2))

# 把获取的列名转换为列表list类型
col_names = food_info.columns.tolist()
# 也可以直接用list转换
col_names = list(food_info.columns)
print(col_names)

# 过滤出列名中以克g为单位的列名
gram_columns = []

for c in col_names:
    if c.endswith("(g)"):
        gram_columns.append(c)

# 然后只取单位为g的前三列数据
gram_df = food_info[gram_columns]
print(gram_df.head(3))

2、过滤结果

2 自己定义pandas类型的数据 和 保存pandas数据 2.1 通过字典定义一个Dateframe数据

1、通过字典定义一个Dataframe的数据

import pandas as pd

data_dict = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.Dataframe(data=data_dict)
print(df)

print("*"*50)
print(df.dtypes)

2、构造数据结果

2.2 通过numpy的ndarray数组定义一个Dataframe数据

1、通过numpy的ndarray定义一个Dataframe的数据

import pandas as pd

df2 = pd.Dataframe(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
                   columns=['a', 'b', 'c'])
print(df2)

print("*"*50)
print(df2.dtypes)

2、构造数据结果

2.3 把数据保存成csv文件

1、使用to_csv()把数据保存成CSV文件

有很多参数,自己去参考API吧,我只说一个:

  • index=True:默认是为True,会把每行的索引也保存下来,但是我们一般保存的CSV文件是不需要保存索引的,直接设置为False吧
import pandas as pd

df2 = pd.Dataframe(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
                   columns=['a', 'b', 'c'])
print(df2)

print("*"*50)
print(df2.dtypes)

df2.to_csv("create_data.csv")

2、生成create_data.csv文件结果

2.4 把数据保存成xlsx文件

1、使用to_excel()把数据保存成CSV文件

import pandas as pd

df2 = pd.Dataframe(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
                   columns=['a', 'b', 'c'])
print(df2)

print("*"*50)
print(df2.dtypes)

df2.to_excel("create_data.xlsx")

to_excel()还有一些其他参数,例如:df2.to_excel(‘out.xlsx’,sheet_name=“sheetname”,index=False)

  • 第一个参数是保存文件名,不能为空
  • sheet_name:设置excel文件脚注
  • index=False:不将索引写入到文件中,我们一般保存数据是不需要列的索引的

2、生成create_data.xlsx文件结果

2.5 pandas把数据保存其他更多格式

1、参考

  • df.to_json():保存成json文件
  • df.to_html():保存成html文件
3 对pandas的列进行计算等 *** 作
  • 我们已经知道了,pandas中的某一列,就是样本的某一个属性 / 特征
  • 我们需要对列数据比如做单位转换,比如从单位g转换为mg,多列数据合并生成新的一列数据作为新的特征
3.1 获取某一列的数据进行 *** 作 3.1.1 获取某一列的数据进行 *** 作

1、如下是获取"Iron_(mg)"这一列的数据,并对该列的数据除以1000的 *** 作

import pandas
food_info = pandas.read_csv("food_info.csv")

# 先获取"Iron_(mg)"列数据
print(food_info["Iron_(mg)"])

# 对"Iron_(mg)" 这一列的所有数据都除以1000
# 注意:这里只是拿到这一列的数据进行 *** 作,并没有修改到food_info中
div_1000 = food_info["Iron_(mg)"] / 1000
print(div_1000)
print(food_info["Iron_(mg)"])

2、获取结果

3、当然还可以对获取到的某一列数据,进行一些其他你想要进行的任何计算 *** 作

# 对"Iron_(mg)"列的每一个值都加上100
add_100 = food_info["Iron_(mg)"] + 100

# 对"Iron_(mg)"列的每一个值都减去100
sub_100 = food_info["Iron_(mg)"] - 100

# 对"Iron_(mg)"列的每一个值都乘以2
mult_2 = food_info["Iron_(mg)"]*2
3.1.2 获取某一列的数据进行 *** 作,并同步修改到整个读取的数据中

1、同步修改数据到整个数据中

import pandas
food_info = pandas.read_csv("food_info.csv")

# 先获取"Iron_(mg)"列数据
print(food_info["Iron_(mg)"])

# 对"Iron_(mg)" 这一列的所有数据都除以1000
# 注意:这里只是拿到这一列的数据进行 *** 作,并没有修改到food_info中
div_1000 = food_info["Iron_(mg)"] / 1000
print(div_1000)


# 如果要让food_info的"Iron_(mg)"的这一列数据也同步修改,可以对这一列进行重新赋值
food_info["Iron_(mg)"] = div_1000
print(food_info["Iron_(mg)"])

2、修改结果如下:

3.2 对某两列数据合并到一起,并添加新的列 3.2.1 对某两列的数据进行计算 *** 作
  • 对某两列的数据进行计算 *** 作,必须保证两列的数据维度是一样的
  • 比如让某两列的数据相乘,就是对应位置的元素值相乘

1、比如我们计算如下的两列数据,让这两列数据相乘

import pandas
food_info = pandas.read_csv("food_info.csv")
print(food_info.head(3))

water_energy = food_info["Water_(g)"] * food_info["Energ_Kcal"]
print(water_energy)

2、相乘之后的结果

3.2.2 把某两列进行一定组合,生成新的一列

1、比如,我们认为"Water_(g)"和"Energ_Kcal"这两列数据存在一定的联系,可以组合出新的一个特征

import pandas
food_info = pandas.read_csv("food_info.csv")
print(food_info.head(3))

water_energy = food_info["Water_(g)"] * food_info["Energ_Kcal"]


iron_grams = food_info["Iron_(mg)"] / 1000  
food_info["Iron_(g)"] = iron_grams
print(food_info.head(3))

2、组合后的结果,如下可以看出food_info已经多了一列数据"Iron_(g)"

3.2 对某一列的数据进行归一化 *** 作

从上面的例子,我们只要知道:

  • 怎样拿到某一列的数据
  • 怎样对某一列的数据进行计算

这样我们就可以,对数据进行很多的 *** 作,现在我们再举个例子,如何对某一列的数据进行归一化 *** 作

1、对某一列的数据进行归一化 *** 作

import pandas
food_info = pandas.read_csv("food_info.csv")

# 先找出某一列的最大值
max_calories = food_info["Energ_Kcal"].max()

# 然后该列的每个值都除以最大值
normalized_calories = food_info["Energ_Kcal"] / max_calories
normalized_protein = food_info["Protein_(g)"] / food_info["Protein_(g)"].max()
normalized_fat = food_info["Lipid_Tot_(g)"] / food_info["Lipid_Tot_(g)"].max()

# 再把归一化后的值 赋值 到对应的列上去
food_info["Normalized_Protein"] = normalized_protein
food_info["Normalized_Fat"] = normalized_fat
3.3 查看计算某一列数据还有哪些常用的API

1、使用dir()函数进行查看

'abs', 'add', 'add_prefix', 'add_suffix', 'agg', 'aggregate', 'align', 'all', 'any', 'append', 'apply', 'argmax',
'argmin', 'argsort', 'array', 'asfreq', 'asof', 'astype', 'at', 'at_time', 'attrs', 'autocorr', 'axes', 'between',
'between_time', 'bfill', 'bool', 'clip', 'combine', 'combine_first', 'convert_dtypes', 'copy', 'corr',
'count', 'cov', 'cummax', 'cummin', 'cumprod', 'cumsum', 'describe', 'diff', 'div', 'divide', 'divmod',
'dot', 'drop', 'drop_duplicates', 'droplevel', 'dropna', 'dtype', 'dtypes', 'duplicated', 'empty', 'eq',
'equals', 'ewm', 'expanding', 'explode', 'factorize', 'ffill', 'fillna', 'filter', 'first', 'first_valid_index',
'floordiv', 'ge', 'get', 'groupby', 'gt', 'hasnans', 'head', 'hist', 'iat', 'idxmax', 'idxmin', 'iloc', 'index',
'infer_objects', 'interpolate', 'is_monotonic', 'is_monotonic_decreasing', 'is_monotonic_increasing',
'is_unique', 'isin', 'isna', 'isnull', 'item', 'items', 'iteritems', 'keys', 'kurt', 'kurtosis', 'last',
'last_valid_index', 'le', 'loc', 'lt', 'mad', 'map', 'mask', 'max', 'mean', 'median', 'memory_usage',
'min', 'mod', 'mode', 'mul', 'multiply', 'name', 'nbytes', 'ndim', 'ne', 'nlargest', 'notna', 'notnull',
'nsmallest', 'nunique', 'pct_change', 'pipe', 'plot', 'pop', 'pow', 'prod', 'product', 'quantile',
'radd', 'rank', 'ravel', 'rdiv', 'rdivmod', 'reindex', 'reindex_like', 'rename', 'rename_axis',
'reorder_levels', 'repeat', 'replace', 'resample', 'reset_index', 'rfloordiv', 'rmod', 'rmul',
'rolling', 'round', 'rpow', 'rsub', 'rtruediv', 'sample', 'searchsorted', 'sem', 'set_axis',
'shape', 'shift', 'size', 'skew', 'slice_shift', 'sort_index', 'sort_values', 'squeeze', 'std', 'sub',
'subtract', 'sum', 'swapaxes', 'swaplevel', 'tail', 'take', 'to_clipboard', 'to_csv', 'to_dict',
'to_excel', 'to_frame', 'to_hdf', 'to_json', 'to_latex', 'to_list', 'to_markdown',
'to_numpy', 'to_period', 'to_pickle', 'to_sql', 'to_string', 'to_timestamp', 'to_xarray',
'transform', 'transpose', 'truediv', 'truncate', 'tshift', 'tz_convert', 'tz_localize',
'unique', 'unstack', 'update', 'value_counts', 'values', 'var', 'view', 'where', 'xs'
3.4 对pandas的某一列数据进行排序
  • NaN是缺失值,无论是按照升序还是降序盘排列, NaN值都是排到最后

  • ascending=False是按照降序排列,即从大到小排列,默认ascending=True是升序排列的(从小到大排列)

1、分别对某一列进行升序和降序排列

import pandas
food_info = pandas.read_csv("food_info.csv")


print(food_info["Sodium_(mg)"])
print("*"*50)

# inplace为True,排序之后,会在food_info中会把排序后的Sodium_(mg)列替换原先的列
# 默认 ascending为True,表示按升序排列(从小到大排列)
food_info.sort_values("Sodium_(mg)", inplace=True)
print(food_info["Sodium_(mg)"])
print("*"*50)

# ascending为False,表示按降序排列(从大到小排列)
food_info.sort_values("Sodium_(mg)", inplace=True, ascending=False)
print(food_info["Sodium_(mg)"])

注意:

如果要对多列进行排序,也可以传入的第一个参数为多个列名的列表

2、排序结果如下:

4 使用pandas分析泰坦尼克号船员获救数据

1、在开始之前,我们先来介绍一下泰坦尼克号船员获救数据数据,该数据一共包含891行(rows),12列(columns),即:

  • 一共有891个样本
  • 每个样本有12个属性特征

2、泰坦尼克号船员获救数据数据的12个列名分别为:

  • Passengerid:每个人都会有一个这样的编号
  • Survived:要么是0,要么是1,表示label值,是否获救
  • Pclass:表示船舱的等级
  • Name:乘客的名字
  • Sex:性别
  • Age:年龄
  • SibSp:兄弟姐妹的数量
  • Parch:老人和孩子的数量
  • Ticket:船票的编码
  • Fare:船票的价格
  • Cabin:船舱的编号,当前列缺失值比较多,一般在数据分析的时候也不会用到
  • Embarked:乘客登船的地点

3、先来查看一下前五行数据

import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")
# print(titanic_survival)
titanic_survival.head()

4.1 查看泰坦尼克号数据某一列缺失值NaN的个数

1、获取泰坦尼克号某一列中缺失值的个数

  • 使用pd.is_null()判断某一列中所有元素是否为缺失值NaN
  • 如果为缺失值,则返回True,否则返回False
  • 缺失值NaN在Execl中是显示为空的
import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")
age = titanic_survival["Age"]
# 从打印的结果可以看到,在Age这一列是存在缺失值NaN的
print(age.loc[0:8])
print("*"*50)

# 对age这一列的每个元素进行缺失值判断,如果是缺失值返回True,否则返回False
age_is_null = pd.isnull(age)
print(age_is_null[0:8])
print("*"*50)

# 根据上面得到的布尔索引值,因为True值为NaN,所以可以取出age这一列所有的NaN值
age_null_true = age[age_is_null]
print(age_null_true)

# 获取Age这一列一共有多少个缺失值
age_null_count = len(age_null_true)
print(age_null_count)

4.2 求泰坦尼克船员数据年龄的平均值

1、直接计算平均年龄

import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")
age = titanic_survival["Age"]

# 平均年龄 = 总的年龄之和 / 样本个数
mean_age = sum(titanic_survival["Age"]) / len(titanic_survival["Age"])

# 发现得到的平均年龄为NaN,是因为我们没有提前过滤掉缺失值
print(mean_age)

2、计算结果为NaN,因此必须先要过滤掉年龄列中的缺失值NaN

4.2.1 先过滤掉年龄列中的缺失值

1、先过滤掉年龄列中的缺失值

import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")
age = titanic_survival["Age"]
age_is_null = pd.isnull(age)

# 取出“Age”列中,不为NaN的年龄值
good_ages = titanic_survival["Age"][age_is_null == False]
print(good_ages)

# 此时再计算平均年龄
correct_mean_age = sum(good_ages) / len(good_ages)
print(correct_mean_age)

2、计算结果

4.2.2 通过pandas内置的API直接计算某一列的平均值

1、pandas在计算平均值的时候,会自动过滤掉NaN值

import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")
age = titanic_survival["Age"]

# pandas在计算平均值的时候,会自动过滤掉NaN值
correct_mean_age = titanic_survival["Age"].mean()
print(correct_mean_age)

2、计算结果

注意:

其实,我们在实际处理数据计算平均值的时候不一定要把缺失值过滤掉,而是通过平均值或中位数等的方式填充缺失值NaN

4.3 计算每个船舱等级船票的平均价格和平均年龄 4.3.1 通过循环计算实现:计算每个船舱等级船票的平均价格

1、计算每个船舱等级船票的平均价格

import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")

# Pclass船舱有三个等级:一等舱、二等舱、三等舱
passenger_classes = [1, 2, 3]

# 定义每个等级船舱平均加个的字典
fares_by_class = {}
for this_class in passenger_classes:
    pclass_rows = titanic_survival[titanic_survival["Pclass"] == this_class]
    # 拿到对应的船舱等级之后,再去取对应船舱等级对应的船舱价格 “Fare ”
    pclass_fares = pclass_rows["Fare"]
    #print(pclass_fares)
    
    # 计算某一等级船舱的平均价格
    fare_for_class = pclass_fares.mean()
    fares_by_class[this_class] = fare_for_class
print(fares_by_class)

2、计算结果

4.3.2 通过pd的内置函数pivot_table():计算每个船舱等级船票的平均价格

1、pivot_table()映射表

import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")


# 计算每个船舱等级中,船票的平均价格
# 三个船舱等级就相当于是三个类别
# 然后计算每个类别中船票的平均值, 因此 valuse=“Fare”,表示我们要计算的数是对应的Age
passenger_age = titanic_survival.pivot_table(index="Pclass", values="Age")
print(passenger_age)

2、计算的结果,可以看到和上面我们通过循环计算的是一致的

4.3.3 通过pd的内置函数pivot_table():计算每个船舱等级中的平均年龄

1、同上面一样

import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")


# 计算每个船舱等级中,年龄的平均值
# 三个船舱等级就相当于是三个类别
# 然后计算每个类别中年龄的平均值, 因此 valuse=“Age”,表示我们要计算的数是对应的Age
passenger_age = titanic_survival.pivot_table(index="Pclass", values="Age")
print(passenger_age)

2、计算结果

  • 默认aggfunc=np.mean是求均值的 *** 作

4.3.4 计算一个量和其他多个量之间的关系

1、登船地点相当于是三个类别,然后求这个三个类别的两个指标数据的求和

import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")

# Embarked乘客登船的地点
# 值是船票的价格Fare 和 获救船员
# 这里的函数就定义为 求 每个登船地点在这两个指标上的数据的求和
port_stats = titanic_survival.pivot_table(index="Embarked", values=["Fare","Survived"], aggfunc=np.sum)
print(port_stats)

2、计算结果

4.4 丢弃含有NaN值的列 或 行

1、使用 dropna()丢弃含有NaN值的行和列

  • axis=1 或 axis=columns:丢弃含有NaN值的列
  • axis=0 :丢弃含有NaN值的行
  • subset:则表示指定要丢弃的数据
#specifying axis=1 or axis='columns' will drop any columns that have null values
import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")

# 丢弃含有NaN的列  或者写成  axis=columns
drop_na_columns = titanic_survival.dropna(axis=1)
# 之前我们的Age是有NaN值的,现在发现只要含有NaN的列,直接就被丢弃了
print(drop_na_columns)
print("*"*50)

# 丢弃 Age和Sex 中含有NaN数据的行
new_titanic_survival = titanic_survival.dropna(axis=0,subset=["Age", "Sex"])
print(new_titanic_survival)

2、结果:

4.5 定位获取到 表格中的某行或某列中的元素

1、获取指定位置的某个值,则需要:

  • 样本的索引
  • 样本的列名
import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")

# 获取第索引为83的样本,对应的列属性为Age的值
row_index_83_age = titanic_survival.loc[83,"Age"]
row_index_1000_pclass = titanic_survival.loc[766,"Pclass"]
print(row_index_83_age)
print(row_index_1000_pclass)

# 获取多个样本,也可以多个属性,通过传入列表
print("*"*50)
row_index_83t0100_age = titanic_survival.loc[83: 100,"Age"]
print(row_index_83t0100_age)

2、结果

##4.6 对某一列排序之后,再对索引重新排序

import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")


new_titanic_survival = titanic_survival.sort_values("Age",ascending=False)
print(new_titanic_survival[0:3])

# 把索引也重新排序
titanic_reindexed = new_titanic_survival.reset_index(drop=True)
print(titanic_reindexed.iloc[0:3])

4.7 定义一个函数,然后使用appley()将其应用到我们的Dataframe数据结构上

1、这个函数是获取每一列的第一百个数据

import pandas as pd
import numpy as np

titanic_survival = pd.read_csv("titanic_train.csv")


# 这个函数是获取每一列的第一百个数据
def hundredth_row(column):
    # 获取每一列的第一百个数据
    hundredth_item = column.iloc[99]
    return hundredth_item

# 返回每一列的第一百行数据
hundredth_row = titanic_survival.apply(hundredth_row)
print(hundredth_row)

结果:

5 pandas中的另外一种数据结构Series

上面我们介绍的数据结构都是Dataframe,我们说Dataframe可以直接看作是一个矩阵或表格类型的数据,那Series又是什么样的数据呢?

  • Series:就相当与是矩阵数据中的一行 或 一列

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5677690.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存