专栏首页行者常至004.python科学计算库pandas(中)

004.python科学计算库pandas(中)

版权声明:本文为博主原创文章,允许转载,请标明出处。 https://blog.csdn.net/qwdafedv/article/details/82702375

测试数据 titanic_train.csv


isnull

import pandas

titanic_survival = pandas.read_csv("titanic_train.csv")
# Pandas库使用NaN(非数字)表示缺失值
# 我们可以使用pandas.isnull()函数,它获取一个pandas series并返回一系列的True和False
age = titanic_survival["Age"]
# 使用loc获取的数据时的切片,包括两端的索引对应的数据
print(age.loc[0:6])
print("--------------------------")
age_is_null = pandas.isnull(age)
# 对普通列表数据的切片,不包括右端的索引对应的数据
print(age_is_null[0:6])
print("--------------------------")
print(type(age_is_null))
print("--------------------------")
print(len(age), len(age_is_null))

nan

import pandas

titanic_survival = pandas.read_csv("titanic_train.csv")
# 其结果是mean_age将是nan。这是因为我们对空值所做的任何计算都会得到空值
age = titanic_survival["Age"]
print(sum(age))
print("--------------------------")
mean_age = sum(age) / len(age)
print(mean_age)
print("--------------------------")
# 在计算平均值之前,我们必须过滤掉遗漏的值
age_is_null = pandas.isnull(age)
good_ages = age[age_is_null == False]
correct_mean_age = sum(good_ages) / len(good_ages)
print(correct_mean_age)
print("--------------------------")
# 丢失的数据是如此常见,以至于许多pandas方法会自动为其过滤
correct_mean_age = age.mean()
print(correct_mean_age)

mean

import pandas

titanic_survival = pandas.read_csv("titanic_train.csv")
# 每节课平均票价
passenger_classes = [1, 2, 3]
fares_by_class = {}
for this_class in passenger_classes:
    # 获取所有满足titanic_survival["Pclass"] == this_class 的数据
    pclass_rows = titanic_survival[titanic_survival["Pclass"] == this_class]
    # 获取符合this_class的数据的Fare列
    pclass_fares = pclass_rows["Fare"]
    # 求平均数并赋值到字典中
    fares_by_class[this_class] = pclass_fares.mean()
print(fares_by_class)

pivot_table

import pandas
import numpy

titanic_survival = pandas.read_csv("titanic_train.csv")
# pivot_table 创建一个电子表格样式的数据透视表。pivot表中的级别将存储在结果DataFrame的索引和列上的多索引对象(层次索引)中
#   index  告诉方法按哪个列分组
#   values 是我们要应用计算的列(可选地聚合列)
#   aggfunc 指定我们要执行的计算 default numpy.mean 沿着指定的轴计算算术平均数
passenger_survival = titanic_survival.pivot_table(index="Pclass", values="Survived", aggfunc=numpy.mean)
print(passenger_survival)
print("------------------------")
passenger_age = titanic_survival.pivot_table(index="Pclass", values="Age")
print(passenger_age)
print("------------------------")
port_stats = titanic_survival.pivot_table(index="Embarked", values=["Fare", "Survived"], aggfunc=numpy.sum)
print(port_stats)
import pandas


def generate_age_label(row):
    age = row["Age"]
    if pandas.isnull(age):
        return "unknown"
    elif age < 18:
        return "minor"
    else:
        return "adult"


titanic_survival = pandas.read_csv("titanic_train.csv")
# 从每列返回第100项
# apply 沿着DataFrame的轴应用一个函数。
# axis : {0 or 'index', 1 or 'columns'}, default 0
#       0 or 'index': apply function to each column. 每列
#       1 or 'columns': apply function to each row. 每行
age_labels = titanic_survival.apply(generate_age_label, axis=1)
titanic_survival['age_labels666'] = age_labels
age_group_survival = titanic_survival.pivot_table(index="age_labels666", values="Survived")
print(age_group_survival)

dropna

import pandas

titanic_survival = pandas.read_csv("titanic_train.csv")
# dropna 删除缺失值
#   axis = 0或'index': 删除包含缺失值的行
#   axis = 1或'columns': 删除包含缺失值的列
#   subset 像数组一样,可选的标签沿着要考虑的其他轴,例如,如果要删除行,这些将是要包含的列的列表。
#   how : {'any', 'all'}
#           'any' : 如果存在任何NA值,删除该行或列。
#           'all' : 如果所有值都是NA,则删除该行或列。
drop_na_columns = titanic_survival.dropna(axis=1)
print(drop_na_columns[0:3])
print("-------------------------------------------")
new_titanic_survival = titanic_survival.dropna(axis=0, subset=["Age", "Sex"])
print(len(new_titanic_survival))
print("-------------------------------------------")
print(new_titanic_survival[0:3])

loc

import pandas

titanic_survival = pandas.read_csv("titanic_train.csv")
# 获取第84行数据的Age列的值 (loc索引下标从0开始)
row_index_83_age = titanic_survival.loc[83, "Age"]
# 获取第767行数据的Pclass列的值 (loc索引下标从0开始)
row_index_766_pclass = titanic_survival.loc[766, "Pclass"]
print(row_index_83_age)
print(row_index_766_pclass)

reset_index

import pandas

titanic_survival = pandas.read_csv("titanic_train.csv")
# 按照Age列进行升序排序
new_titanic_survival = titanic_survival.sort_values("Age", ascending=False)
print(new_titanic_survival[0:3])
print("-------------------------------")
# reset_index 对于具有多层索引的DataFrame,返回新的DataFrame,并在索引名下的列中标记信息,
#               如果没有,默认为'level_0'、'level_1'等。
#               对于标准索引,将使用索引名称(如果设置),
#               否则将使用默认的“index”或“level_0”(如果已经使用了“index”)。
# drop : boolean, default False 不要尝试在dataframe列中插入索引。这会将索引重置为默认整数索引。
titanic_reindexed = new_titanic_survival.reset_index(drop=True)
titanic_reindexed2 = new_titanic_survival.reset_index()
print(titanic_reindexed2.iloc[0:3])
print("-------------------------------")
print(titanic_reindexed.iloc[0:3])

apply

import pandas


def hundredth_row(column):
    # 提取第100项
    hundredth_item = column.iloc[99]
    return hundredth_item


titanic_survival = pandas.read_csv("titanic_train.csv")
# 从每列返回第100项
# apply 沿着DataFrame的轴应用一个函数。
# axis : {0 or 'index', 1 or 'columns'}, default 0
#       0 or 'index': apply function to each column. 每列
#       1 or 'columns': apply function to each row. 每行
hundredth_data = titanic_survival.apply(hundredth_row)
print(hundredth_data)
import pandas


def not_null_count(column):
    column_null = pandas.isnull(column)
    null = column[column_null]
    return len(null)


titanic_survival = pandas.read_csv("titanic_train.csv")
# 从每列返回第100项
# apply 沿着DataFrame的轴应用一个函数。
# axis : {0 or 'index', 1 or 'columns'}, default 0
#       0 or 'index': apply function to each column. 每列
#       1 or 'columns': apply function to each row. 每行
column_null_count = titanic_survival.apply(not_null_count)
print(column_null_count)
import pandas


def which_class(row):
    pclass = row['Pclass']
    if pandas.isnull(pclass):
        return "Unknown"
    elif pclass == 1:
        return "First Class"
    elif pclass == 2:
        return "Second Class"
    elif pclass == 3:
        return "Third Class"


titanic_survival = pandas.read_csv("titanic_train.csv")
# 从每列返回第100项
# apply 沿着DataFrame的轴应用一个函数。
# axis : {0 or 'index', 1 or 'columns'}, default 0
#       0 or 'index': apply function to each column. 每列
#       1 or 'columns': apply function to each row. 每行
classes = titanic_survival.apply(which_class, axis=1)
print(classes)
import pandas


def is_minor(row):
    if row["Age"] < 18:
        return True
    else:
        return False


titanic_survival = pandas.read_csv("titanic_train.csv")
# 从每列返回第100项
# apply 沿着DataFrame的轴应用一个函数。
# axis : {0 or 'index', 1 or 'columns'}, default 0
#       0 or 'index': apply function to each column. 每列
#       1 or 'columns': apply function to each row. 每行
minors = titanic_survival.apply(is_minor, axis=1)
print(minors)
import pandas


def generate_age_label(row):
    age = row["Age"]
    if pandas.isnull(age):
        return "unknown"
    elif age < 18:
        return "minor"
    else:
        return "adult"


titanic_survival = pandas.read_csv("titanic_train.csv")
# 从每列返回第100项
# apply 沿着DataFrame的轴应用一个函数。
# axis : {0 or 'index', 1 or 'columns'}, default 0
#       0 or 'index': apply function to each column. 每列
#       1 or 'columns': apply function to each row. 每行
age_labels = titanic_survival.apply(generate_age_label, axis=1)
print(age_labels)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 我不是算命先生,却对占卜有了疑惑——如何论证“占卜前提”的正确与否

    事出有因,我对《周易》感兴趣了很多年。只是觉得特别有趣,断断续续学习了一些皮毛。这几天又偶然接触到了《梅花易数》,觉得很是精彩,将五行八卦天干地支都串联了起来。...

    一石匠人
  • 一张图理清《梅花易数》梗概

    学《易经》的目的不一定是为了卜卦,但是了解卜卦绝对能够让你更好地了解易学。今天用一张思维导图对《梅花易数》的主要内容进行概括,希望能够给学友们提供帮助。

    一石匠人
  • 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

    从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负...

    haifeiWu
  • 《动物魔法学校》儿童学编程Scratch之“外观”部分

    导读:本文通过一个案例《动物魔法学校》来学习Scratch语言的“外观”部分。之后通过一系列其他功能的综合运用对作品功能进行了扩展。

    一石匠人
  • 天干地支五行八卦的对应关系

    一石匠人
  • 声音功能让儿童编程更有创造性

    导读:Scratch中声音功能非常强大,除了常规的音效,你甚至可以模拟各种乐器的各个发音、设置节拍、休止……如果你愿意,甚至可以用它创作一个交响乐。我们可以引导...

    一石匠人
  • SQL中GROUP BY用法示例

    GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类...

    Awesome_Tang
  • 【系统设置】CentOS 修改机器名

    ken.io
  • 儿童创造力教育与编程教育的碰撞——MIT雷斯尼克教授最新理论梗概

    儿童编程教育已经在我国各一线二线城市疯狂出现,颇有“烂大街”的趋势。我们不禁要问很多很多问题:

    一石匠人
  • 什么样的人生才是有意义的人生——没有标准的标准答案

    【导读】其实我们可以跳出这个小圈圈去更加科客观地看一下这个世界。在夜晚的时候我们仰望天空,浩瀚的宇宙中整个地球只是一粒浮尘,何况地球上一个小小的人类?在漫长的历...

    一石匠人

扫码关注云+社区

领取腾讯云代金券