• 学会这 29 个 函数,你就是 Pandas 专家


    Pandas 无疑是 Python 处理表格数据最好的库之一,但是很多新手无从下手,这里总结出最常用的 29 个函数,先点赞收藏,留下印象,后面使用的时候打开此文 CTRL + F 搜索函数名称,检索其用法即可。

    技术提升

    本文来自技术交流群友分享,群友已超过3000人,添加时最好的备注方式为:来源+兴趣方向,方便找到更快获取资料、入群

    方式①、添加微信号:dkl88191,备注:来自CSDN
    方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

    1、读取 csv 文件 df.read_csv

    csv 通常是读取 Pandas DataFrame 的最流行的文件格式,你可以使用 pd.read_csv() 方法创建 Pandas DataFrame,类似的函数还有 read_excel,用法如下:

    file = "file.csv"
    
    df = pd.read_csv(file)
    print(df)
    ####### out put ##########
       col1  col2 col3
    0     1     2    A
    1     3     4    B
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、写入 csv 文件 df.to_csv

    将 DataFrame 导出到 csv,类似的函数是 df.to_excel,用法如下:

    df.to_csv("file.csv", sep = "|", index = False)
    
    • 1

    查看 file.csv

    !cat file.csv
    col1|col2|col3
    1|2|A
    3|4|B
    
    • 1
    • 2
    • 3
    • 4

    3、数据帧 pd.DataFrame

    用来创建 Pandas 的 DataFrame:

    data = [[1, 2, "A"], 
            [3, 4, "B"]]
    
    df = pd.DataFrame(data, 
                      columns = ["col1", "col2", "col3"])
    print(df)
    
    ####### out put ##########
       col1  col2 col3
    0     1     2    A
    1     3     4    B
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    借助这个构造函数,我们还可以把字典转换为 DataFrame:

    data = {'col1': [1, 2], 
            'col2': [3, 4], 
            'col3': ["A", "B"]}
    
    df = pd.DataFrame(data=data)
    print(df)
    ####### out put ##########
       col1  col2 col3
       col1  col2 col3
    0     1     3    A
    1     2     4    B
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4、 获取数据帧的形状 df.shape

    df.shape 属性可以获取 DataFrame 的形状,也就是几行几列这样的数据:

    print(df)
    print("Shape:", df.shape)
    ####### out put ##########
       col1  col2 col3
       col1  col2 col3
    0     1     3    A
    1     2     4    B
    
    Shape: (2, 3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    5、查看前 n 行 df.head(n)

    数据帧(DataFrame) 会有很多行,通常我们只对查看 DataFrame 的前 n 行感兴趣,这时可以使用 df.head(n) 方法打印前 n 行:

    print(df.head(5))
    ####### out put ##########
       col1  col2 col3
    0     1     2    A
    1     3     4    B
    2     5     6    C
    3     7     8    D
    4     9    10    E
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6、打印列的类型 df.dtypes

    Pandas 为 DataFrame 中的每一列分配适当的数据类型。使用 dtypes 参数打印所有列的数据类型:

    df.dtypes
    
    ####### out put ##########
    col1     int64
    col2     int64
    col3    object
    dtype: object
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    7、修改列的类型 astype

    如果要更改列的数据类型,可以使用 astype() 方法,如下所示:

    df["col1"] = df["col1"].astype(np.int8)
    print(df.dtypes)
    ####### out put ##########
    col1      int8
    col2     int64
    col3    object
    dtype: object
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    8-9、打印有关 DataFrame 的描述性信息

    这里有两个函数,第一个 df.info():

    df.info()
    ####### out put ##########
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 10 entries, 0 to 9
    Data columns (total 3 columns):
     #   Column  Non-Null Count  Dtype 
    ---  ------  --------------  ----- 
     0   col1    10 non-null     int8  
     1   col2    10 non-null     int64 
     2   col3    10 non-null     object
    dtypes: int64(1), int8(1), object(1)
    memory usage: 298.0+ bytes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    第二个是 df.describe()。

    如果要打印每个数值列的平均值、标准偏差、最大值等标准统计信息,就可以这样:

    print(df.describe())
    ####### out put ##########
            col1   col2
    count  10.00  10.00
    mean   10.00  11.00
    std     6.06   6.06
    min     1.00   2.00
    25%     5.50   6.50
    50%    10.00  11.00
    75%    14.50  15.50
    max    19.00  20.00
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    10、 填充 NaN 值 df.fillna

    假如有这样的 DataFrame:

    df = pd.DataFrame([[1, 2, "A"], [np.nan, 4, "B"]], 
                      columns = ["col1", "col2", "col3"])
    print(df)
    ####### out put ##########
       col1  col2 col3
    0   1.0     2    A
    1   NaN     4    B
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    里面有 NaN,如果要填充它,可以这样:

    df.fillna(0, inplace = True)
    print(df)
    ######## out put ##########
       col1  col2 col3
    0   1.0     2    A
    1   0.0     4    B
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    11、数据帧的关联 df.merge

    如果你想用一个连接键合并两个 DataFrame,使用 pd.merge() 方法:

    merge 之前:

    df1 = ...
    df2 = ...
    
    print(df1)
    print(df2)
    ######## out put ##########
       col1  col2 col3
    0     1     2    A
    1     3     4    A
    2     5     6    B
      col3 col4
    0    A    X
    1    B    Y
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    使用 df.merge 后,可以生成新的数据帧

    pd.merge(df1, df2, on = "col3")
    ######## out put ##########
      col1  col2 col3 col4
    0     1     2    A    X
    1     3     4    A    X
    2     5     6    B    Y
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    12、数据帧排序 df.sort_values

    排序是 DataFrame 非常典型的操作,我们可以使用 df.sort_values() 方法对 DataFrame 进行排序:

    f = pd.DataFrame([[1, 2,  "A"], 
                       [5, 8,  "B"], 
                       [3, 10, "B"]], 
                      columns = ["col1", "col2", "col3"])
    
    print(df.sort_values("col1"))
    ######## out put ##########
       col1  col2 col3
    0     1     2    A
    2     3    10    B
    1     5     8    B
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    13、数据帧分组 df.groupby

    要对 DataFrame 进行分组并执行聚合,使用 Pandas 中的 groupby() 方法,如下所示:

    df = pd.DataFrame([[1, 2,  "A"], 
                       [5, 8,  "B"], 
                       [3, 10, "B"]], 
                      columns = ["col1", "col2", "col3"])
    
    df.groupby("col3").agg({"col1":sum, "col2":max})
    ######## out put ##########
          col1  col2
    col3            
    A        1     2
    B        8    10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    14、重命名列 df.rename

    如果要重命名列标题,请使用 df.rename() 方法,如下所示:

    f = pd.DataFrame([[1, 2,  "A"], 
                       [5, 8,  "B"], 
                       [3, 10, "B"]], 
                      columns = ["col1", "col2", "col3"])
    
    df.rename(columns = {"col1":"col_A"})
    
    ######## out put ##########
    
       col_A  col2 col3
    0     1     2    A
    1     5     8    B
    2     3    10    B
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    15、删除列 df.drop

    如果要删除数据帧中的某一列,可以这样:

    df = pd.DataFrame([[1, 2,  "A"], 
                       [5, 8,  "B"], 
                       [3, 10, "B"]], 
                      columns = ["col1", "col2", "col3"])
    
    print(df.drop(columns = ["col1"]))
    
    ######## out put ##########
    
       col2 col3
    0     2    A
    1     8    B
    2    10    B
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    16、增加列

    方法一:使用赋值运算符添加新列

    df = pd.DataFrame([[1, 2], [3, 4]], 
                      columns = ["col1", "col2"])
    
    df["col3"] = df["col1"] + df["col2"]
    print(df)
    
    ######## out put ##########
    
       col1  col2  col3
    0     1     2     3
    1     3     4     7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    方法二:df.assign()

    df = pd.DataFrame([[1, 2], [3, 4]], 
                      columns = ["col1", "col2"])
    
    df = df.assign(col3 = df["col1"] + df["col2"])
    
    print(df)
    
    ######## out put ##########
    
       col1  col2  col3
    0     1     2     3
    1     3     4     7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    17、数据帧过滤-布尔型过滤

    如果该行上的条件评估为 True,则选择该行:

    df = pd.DataFrame([[1, 2,  "A"], 
                       [5, 8,  "B"], 
                       [3, 10, "B"]], 
                      columns = ["col1", "col2", "col3"])
    
    print(df[df["col2"] > 5])
    
    ######## out put ##########
    
       col1  col2 col3
    1     5     8    B
    2     3    10    B
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    18、数据帧过滤-之获取某一列

    df["col1"] ## or df.col1
    
    ######## out put ##########
    
    0    1
    1    5
    2    3
    Name: col1, dtype: int64
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    19、数据帧过滤-按标签选择 df.loc

    在基于标签的选择中,要求的每个标签都必须在 DataFrame 的索引中。整数也是有效的标签,但它们指的是标签而不是索引位置。

    假如有如下 DataFrame:

    df = pd.DataFrame([[6, 5,  10], 
                       [5, 8,  6], 
                       [3, 10, 4]], 
                      columns = ["Maths", "Science", "English"],
                      index = ["John", "Mark", "Peter"])
    
    print(df)
    
    ######## out put ##########
    
           Maths  Science  English
    John       6        5       10
    Mark       5        8        6
    Peter      3       10        4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    我们使用 df.loc 方法进行基于标签的选择:

    df.loc["John"]
    
    ######## out put ##########
    
    Maths       6
    Science     5
    English    10
    Name: John, dtype: int64
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    df.loc["Mark", ["Maths", "English"]]
    
    ######## out put ##########
    
    Maths      5
    English    6
    Name: Mark, dtype: int64
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    但是在df.loc[]中,不允许使用索引来过滤 DataFrame,如下图:

    20、数据帧过滤-按索引选择 df.iloc

    以 19 里面的数据帧为例,使用 df.iloc 可以用索引:

    df.iloc[0]
    
    ######## out put ##########
    
    Maths       6
    Science     5
    English    10
    Name: John, dtype: int64
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    21、数据帧中对某一列去重

    df = pd.DataFrame([[1, 2,  "A"], 
                       [5, 8,  "B"], 
                       [3, 10, "A"]], 
                      columns = ["col1", "col2", "col3"])
    
    df["col3"].unique()
    
    ######## out put ##########
    
    array(['A', 'B'], dtype=object)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    22、数据帧中获取某一列去重后的个数

    df["col3"].nunique()
    
    ######## out put ##########
    
    2
    
    • 1
    • 2
    • 3
    • 4
    • 5

    23、将函数应用于 DataFrame df.apply

    非常实用:

    def add_cols(row):
        return row.col1 + row.col2
    
    df = pd.DataFrame([[1, 2], 
                       [5, 8], 
                       [3, 9]], 
                      columns = ["col1", "col2"])
                      
    df["col3"] = df.apply(add_cols, axis=1)
    print(df)
    
    ######## out put ##########
    
       col1  col2  col3
    0     1     2     3
    1     5     8    13
    2     3     9    12
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    还可以将方法应用于单个列,如下所示:

    def square_col(num):
        return num**2
    
    df = pd.DataFrame([[1, 2], 
                       [5, 8], 
                       [3, 9]], 
                      columns = ["col1", "col2"])
                      
    df["col3"] = df.col1.apply(square_col)
    print(df)
    
    ######## out put ##########
    
       col1  col2  col3
    0     1     2     1
    1     5     8    25
    2     3     9     9
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    24、标记重复行 df.duplicated

    你可以使用 df.duplicated() 方法标记所有重复的行

    df = pd.DataFrame([[1, "A"], 
                       [2, "B"], 
                       [1, "A"]], 
                      columns = ["col1", "col2"])
                      
    df.duplicated(keep=False)
    
    ######## out put ##########
    
    0     True
    1    False
    2     True
    dtype: bool
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    25、删除重复行 df.drop_duplicates

    可以使用 df.drop_duplicates() 方法删除重复的行,如下所示:

    df = pd.DataFrame([[1, "A"], 
                       [2, "B"], 
                       [1, "A"]], 
                      columns = ["col1", "col2"])
                      
    print(df.drop_duplicates())
    
    ######## out put ##########
    
    col1 col2
    0     1    A
    1     2    B
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    26、寻找值的分布 value_counts

    要查找列中每个唯一值的频率,请使用 df.value_counts() 方法:

    df = pd.DataFrame([[1, "A"], 
                       [2, "B"], 
                       [1, "A"]], 
                      columns = ["col1", "col2"])
                      
    print(df.value_counts("col2"))
    
    ######## out put ##########
    
    col2
    A    2
    B    1
    dtype: int64
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    27、 重置 DataFrame 的索引 df.reset_index

    要重置 DataFrame 的索引,请使用 df.reset_index() 方法:

    df = pd.DataFrame([[6, 5,  10], 
                       [5, 8,  6], 
                       [3, 10, 4]], 
                      columns = ["col1", "col2", "col3"],
                      index = [2, 3, 1])
    
    print(df.reset_index())
    
    ######## out put ##########
    
       index  col1  col2  col3
    0      2     6     5    10
    1      3     5     8     6
    2      1     3    10     4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    要删除旧索引,请将 drop=True 作为参数传递给上述方法:

    df.reset_index(drop=True)
    
    ######## out put ##########
    
       col1  col2  col3
    0     6     5    10
    1     5     8     6
    2     3   10     4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    28、查找交叉表 df.crosstab

    要返回跨两列的每个值组合的频率,请使用 pd.crosstab() 方法:

    df = pd.DataFrame([["A", "X"], 
                       ["B", "Y"], 
                       ["C", "X"],
                       ["A", "X"]], 
                      columns = ["col1", "col2"])
    
    print(pd.crosstab(df.col1, df.col2))
    
    ######## out put ##########
    
    col2  X  Y
    col1      
    A     2  0
    B     0  1
    C     1  0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    29、透视数据帧

    数据透视表是 Excel 中常用的数据分析工具。与上面讨论的交叉表类似,Pandas 中的数据透视表提供了一种交叉制表数据的方法。

    假如 DataFrame 如下:

    df = ...
    
    print(df)
        Name  Subject  Marks
    0   John    Maths      6
    1   Mark    Maths      5
    2  Peter    Maths      3
    3   John  Science      5
    4   Mark  Science      8
    5  Peter  Science     10
    6   John  English     10
    7   Mark  English      6
    8  Peter  English      4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    使用 pd.pivot_table() 方法,可以将列条目转换为列标题:

    pd.pivot_table(df, 
                   index = ["Name"],
                   columns=["Subject"], 
                   values='Marks',
                   fill_value=0)
    
    ######## out put ##########
    
    Subject  English  Maths  Science
    Name                            
    John          10      6        5
    Mark           6      5        8
    Peter          4      3       10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    最后的话

    恭喜你看完了 Pandas 中最常用的 29 种方法,后面在使用 Pandas 时,你可能会在 90% 的时间里使用这些方法,点赞、收藏、关注,后续使用 Pandas 不迷路。

  • 相关阅读:
    华为机试 - 判断一组不等式是否满足约束并输出最大差
    C++笔记之引用折叠规则
    《动手学深度学习 Pytorch版》 7.6 残差网络(ResNet)
    canvas 中如何实现物体的框选(六)
    【实验4:MQTT交互实验】
    js到vue到react的发展
    PostgreSQL查询表操作
    EtherNet/IP协议开发:奠基仪式
    Facebook的创新实验室:人工智能与新技术探索
    jQuery,解决命名冲突的问题
  • 原文地址:https://blog.csdn.net/qq_34160248/article/details/127712177