美文网首页
Python | Pandas

Python | Pandas

作者: shwzhao | 来源:发表于2022-06-21 15:09 被阅读0次

    还没整理好,再慢慢搞吧。


    资源

    利用 Python 进行数据分析 · 第 2 版
    Pandas进阶修炼120题


    import pandas as pd
    

    1. 读取写出

    1.1 数据读取

    可以读取的数据文件格式有很多,二进制、json、HDF5......
    我需要掌握的只是读取 .fa 之类的普通文本格式和.csv.tsv 之类的数据框格式。

    • pd.read_csv('input_file')
      sep = '\t': 设置分隔符为制表符,默认为逗号
      header = 0: 设置第一行为表头,也可设置无表头header = None,多层索引header = [0, 1, 3]
      names = ['col1', 'col2', 'col3']: 指定列名
      index_col = 'col1': 指定索引列
      usecols = []: 导入部分列
      nrows: 读取指定行
      skiprows = 2: 跳过指定行
      skip_blank_lines = True: 跳过空行,header参数将忽略空行和注释行
    >>> df = pd.read_csv("mpg.tsv", sep="\t", header=0, usecols=[0,1,5,4,3,2], names=["Manu","Model","Displ","Year","Cyl","Trans"])
    >>> df
               Manu   Model  Displ  Year  Cyl       Trans
    0          audi      a4    1.8  1999    4    auto(l5)
    1          audi      a4    1.8  1999    4  manual(m5)
    2          audi      a4    2.0  2008    4  manual(m6)
    3          audi      a4    2.0  2008    4    auto(av)
    4          audi      a4    2.8  1999    6    auto(l5)
    ..          ...     ...    ...   ...  ...         ...
    229  volkswagen  passat    2.0  2008    4    auto(s6)
    230  volkswagen  passat    2.0  2008    4  manual(m6)
    231  volkswagen  passat    2.8  1999    6    auto(l5)
    232  volkswagen  passat    2.8  1999    6  manual(m5)
    233  volkswagen  passat    3.6  2008    6    auto(s6)
    
    [234 rows x 6 columns]
    
    • pd.read_excel(): 读取excel文件
      sheet_name = 'Sheet2': 指定标签页,默认读取第一个
    df = pd.read_excel("team.xlsx")
    
    1.2 数据写出
    • pd.to_csv('output_file')
      header = False: 不要表头
      index = False: 不要索引
    pd.to_scv('')
    
    • pd.to_excel('output.xlsx')
      sheet_name = 'Sheet1': 指定标签页

    2. 索引

    • df.set_index(): 建立索引
      inplace = True
    • df.reset_index(): 重置索引
      level = class1
    • pd.MultiIndex.from_arrays(): 多层索引
    • pd.MultiIndex.from_tuples()
    • pd.MultiIndex.from_product()

    3. 查看数据

    • df.dtypes: 数据类型查看, 各字段的数据类型
    >>> df.dtypes
    Manu      object
    Model     object
    Displ    float64
    Year       int64
    Cyl        int64
    Trans     object
    dtype: object
    
    • df.head()
    >>> df.head()
       Manu Model  Displ  Year  Cyl       Trans
    0  audi    a4    1.8  1999    4    auto(l5)
    1  audi    a4    1.8  1999    4  manual(m5)
    2  audi    a4    2.0  2008    4  manual(m6)
    3  audi    a4    2.0  2008    4    auto(av)
    4  audi    a4    2.8  1999    6    auto(l5)
    
    • df.tail()
    • df.sample()
    >>> df.sample()
           Manu        Model  Displ  Year  Cyl     Trans
    178  toyota  4runner 4wd    4.7  2008    8  auto(l5)
    
    • df.shape
    >>> df.shape
    (234, 6)
    
    • df.info()
    >>> df.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 234 entries, 0 to 233
    Data columns (total 6 columns):
     #   Column  Non-Null Count  Dtype
    ---  ------  --------------  -----
     0   Manu    234 non-null    object
     1   Model   234 non-null    object
     2   Displ   234 non-null    float64
     3   Year    234 non-null    int64
     4   Cyl     234 non-null    int64
     5   Trans   234 non-null    object
    dtypes: float64(1), int64(2), object(3)
    memory usage: 11.1+ KB
    
    • df.describe()
    >>> df.describe()
                Displ         Year         Cyl
    count  234.000000   234.000000  234.000000
    mean     3.471795  2003.500000    5.888889
    std      1.291959     4.509646    1.611534
    min      1.600000  1999.000000    4.000000
    25%      2.400000  1999.000000    4.000000
    50%      3.300000  2003.500000    6.000000
    75%      4.600000  2008.000000    8.000000
    max      7.000000  2008.000000    8.000000
    
    • df.mean()
      axis
    >>> df.mean()
    Displ       3.471795
    Year     2003.500000
    Cyl         5.888889
    dtype: float64
    

    4. 数据筛选

    4.1 行
    • df.loc[]: 按索引选择行
    • df.iloc[]: 按数字索引选择行
    >>> df.iloc[1]
    Manu           audi
    Model            a4
    Displ           1.8
    Year           1999
    Cyl               4
    Trans    manual(m5)
    Name: 1, dtype: object  
    >>> df.iloc[[1,3,5]]
       Manu Model  Displ  Year  Cyl       Trans
    1  audi    a4    1.8  1999    4  manual(m5)
    3  audi    a4    2.0  2008    4    auto(av)
    5  audi    a4    2.8  1999    6  manual(m5)
    
    • df[1:3]: 切片选择行
    >>> df[3:5]
       Manu Model  Displ  Year  Cyl     Trans
    3  audi    a4    2.0  2008    4  auto(av)
    4  audi    a4    2.8  1999    6  auto(l5)
    
    4.2 列
    • 选择列
    df['Manu']
    df[['Maun', 'Model']]
    
    • 点操作:当列名为一个合法的Python变量时,可以直接使用点操作为属性去使用
    >>> df.Manu
    0            audi
    1            audi
    2            audi
    3            audi
    4            audi
              ...
    229    volkswagen
    230    volkswagen
    231    volkswagen
    232    volkswagen
    233    volkswagen
    Name: Manu, Length: 234, dtype: object
    
    4.3 行和列
    • df.loc[]: 按轴标签
    >>> df.iloc[1,3]
    1999
    >>> df.loc[1,"Model"]
    'a4'
    >>> df.loc[14:17, ['Trans', 'Year']]
             Trans  Year
    14  manual(m6)  2008
    15    auto(l5)  1999
    16    auto(s6)  2008
    17    auto(s6)  2008
    
    • df.iloc[]: 按数字索引
    [234 rows x 6 columns]
    >>> df.iloc[14:17, [5,3]]
             Trans  Year
    14  manual(m6)  2008
    15    auto(l5)  1999
    16    auto(s6)  2008
    

    注意df.loc[]df.iloc[]的14:17的结果是不一样的

    • df.at[]: 取具体值
    • df.iat[]: 数字索引取具体值
    4.4 条件
    • 比较
    >>> df[df.Model == "a4"] # 按表达式筛选行
       Manu Model  Displ  Year  Cyl       Trans
    0  audi    a4    1.8  1999    4    auto(l5)
    1  audi    a4    1.8  1999    4  manual(m5)
    2  audi    a4    2.0  2008    4  manual(m6)
    3  audi    a4    2.0  2008    4    auto(av)
    4  audi    a4    2.8  1999    6    auto(l5)
    5  audi    a4    2.8  1999    6  manual(m5)
    6  audi    a4    3.1  2008    6    auto(av)
    
    • df.query()
    • df.filter()
    4.5 高级过滤
    • df.where()
    • np.where()
    • df.mask()
    • df.lookup()

    5. 添加修改

    5.1 增加列
    • 定义新列
    frame['new_col']
    
    • df.insert()
    • df.assign()
    • df.eval()
    5.2 增加行
    • 定义新行
    • df.append(): 追加
    • pd.concat()
      ignore_index=True: 索引重新编
    5.3 合并
    • pd.merge()
    • pd.combine()
    • pd.combine_first()
    • df.update()
    5.4 修改
    • 赋值修改
    • df.replace(): 替换数据
    • 填充空值
    • df.rename()修改索引名
    5.5 比对

    ``

    5.6 排序
    • df.sort_index(): 索引排序
      axis=1: 在列索引上排序
      ascending=False: 降序
      ignore_index=True
      inplace=True: 排序后生效,改变原数据
      na_position='first': 空值在前, 另'last'表示空值在后
      level=1: 如果多层,排一级
    • df.reindex(): 按自己定义的顺序索引
      axis=1: 指定列顺序
    • df.sort_values(): 数值排序
    • df.namallest()
    5.7 删除
    • pop()
    • del df['col']
    • df.drop(): 通过指定标签名称和相应的轴,或直接给定索引或列名称来删除行或列
      labels: 要删除的列或者行,如果要删除多个,传入列表;
      axis: 轴的方向,0为行,1为列,默认为0;
      index: 指定的一行或多行;
      column: 指定的一列或多列;
      level: 索引层级,将删除此层级;
      inplace: 布尔值,是否生效;
      errors: ignore或raise,默认为raise,如果为ignore,则容忍错误,仅删除现有标签。
    >>> df = pd.DataFrame({'A':list('abce'), 'B':range(4)})
    >>> df
       A  B
    0  a  0
    1  b  1
    2  c  2
    3  e  3
    >>> df.drop([0, 1]) # 删除指定行
       A  B
    2  c  2
    3  e  3
    >>> df.drop('A', axis=1) # 删除指定列
       B
    0  0
    1  1
    2  2
    3  3
    
    • df.drop_duplicates(): 删除重复值
      subset: 指定的标签或者标签序列,仅删除这些列重复值,默认情况为所有列;
      keep: first保留第一次出现的重复值,默认;last保留最后一次出现的重复值;False删除所有重复值;
      inplace: 是否生效;
      ignore_index: 如果为True,则重新分布自然索引。
    • df.dropna(): 删除空值

    6. 文本处理

    6.1 文本处理

    这块与 Python 自带的字符串方法非常相似

    • 大小写转换
      .str.lower().str.upper().str.title().str.capitalize().str.swapcase()
    • 填充
      .str.center().str.ljust().str.rjust().str.pad().str.zfill()
    • 计数
      .str.count().str.len()
    • 判断
      .str.isalpha().str.isnumeric().str.isalnum().str.isdigit().str.isdecimal().str.isspace().str.islower().str.isupper().str.istittle()
    6.2 文本高级处理
    • .str.split(): 字符分隔
    • .str.slice(): 文本切片选择
    • .str.partition: 文本划分
    • .str.replace(): 文本替换
    • .str.slice_replace()
    • .str.repeat()
    • .str.cat()
    • .str.findall()
    • .str.contains()
    • .str.extract()

    7. 分组聚合

    • df.groupby(): 分组
      by
      axis
      levle
      sort
      group_keys
      observed
    按标签分组
    表达式
    函数分组
    多种方法混合
    df.pipe()
    
    • df.get_group(): 查看分组对象单个分组的内容
    • pd.cut(): 数据分箱
    • pd.qcut(): 数据分箱

    8. 结构转换

    • df.pivot(): 数据透视
      index
      columns
      values
    • pd.pivot_table(): 数据透视
    • df.melt(): 数据融合,df.pivot()的逆操作函数
    • df.stack(): 数据堆叠
    • df.transpose(): 数据转置,缩写df.T
    • df.swapaxes(): 数据转置

    因子化

    9. 数据迭代

    • df.iterrows()
    • df.itertuples()
    • df.items()

    10. 函数应用

    • pipe()
    • apply()
    • applymap()
    • map()
    • agg()
    • transform()
    • copy()

    相关文章

      网友评论

          本文标题:Python | Pandas

          本文链接:https://www.haomeiwen.com/subject/jaudcltx.html