相关文章推荐
果断的针织衫  ·  kotlin - Android ...·  1 年前    · 
虚心的炒面  ·  Schema and data type ...·  1 年前    · 

🍀 兄dei 你的随手一赞,就是对我莫大的鼓励! 🍀

🌺 兄dei 每日一赞, 发大财 行大运 哦! 🌺

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))
    

    输出结果:

    <class 'pandas.core.frame.DataFrame'>
    (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)
    

    ##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:就相当与是矩阵数据中的一行 或 一列
  • 分类:
    人工智能
    标签: