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

 更新时间:2022年11月07日 15:24:51   作者:somenzz  
Pandas 无疑是 Python 处理表格数据最好的库之一,但是很多新手无从下手,这里总结出最常用的 29 个函数,感兴趣的小伙伴可以跟随小编一起学习一下

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

2、写入 csv 文件 df.to_csv

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

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

查看 file.csv

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

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

借助这个构造函数,我们还可以把字典转换为 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

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)

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

6、打印列的类型 df.dtypes

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

df.dtypes

####### out put ##########
col1     int64
col2     int64
col3    object
dtype: object

7、修改列的类型 astype

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

df["col1"] = df["col1"].astype(np.int8)
print(df.dtypes)
####### out put ##########
col1      int8
col2     int64
col3    object
dtype: object

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

第二个是 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

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

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

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

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

使用 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

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

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

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

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

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

方法二: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

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

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

df["col1"] ## or df.col1

######## out put ##########

0    1
1    5
2    3
Name: col1, dtype: int64

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

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

df.loc["John"]

######## out put ##########

Maths       6
Science     5
English    10
Name: John, dtype: int64
df.loc["Mark", ["Maths", "English"]]

######## out put ##########

Maths      5
English    6
Name: Mark, dtype: int64

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

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

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

df.iloc[0]

######## out put ##########

Maths       6
Science     5
English    10
Name: John, dtype: int64

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)

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

df["col3"].nunique()

######## out put ##########

2

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

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

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

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

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

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

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

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

df.reset_index(drop=True)

######## out put ##########

   col1  col2  col3
0     6     5    10
1     5     8     6
2     3    10     4

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

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

使用 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

到此这篇关于学会这29个常用函数,你就是Pandas专家的文章就介绍到这了,更多相关Pandas 函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中windows链接linux执行命令并获取执行状态的问题小结

    python中windows链接linux执行命令并获取执行状态的问题小结

    这篇文章主要介绍了python中windows链接linux执行命令并获取执行状态,由于工具是pyqt写的所以牵扯到用python链接linux的问题,这里记录一下一些碰到的问题,需要的朋友可以参考下
    2022-11-11
  • python 异步async库的使用说明

    python 异步async库的使用说明

    这篇文章主要介绍了python 异步async库的使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python实现读取excel写入mysql的小工具详解

    python实现读取excel写入mysql的小工具详解

    EXCEL 和 MySQL 大体上来说都可以算是"数据库",MySQL貌似有EXCEL的接口,但是最近在自学Python,用Python实现了一下,下面这篇文章主要给大家介绍了关于利用python实现读取excel写入mysql的一个小工具,需要的朋友可以参考下。
    2017-11-11
  • Python中dict和set的用法讲解

    Python中dict和set的用法讲解

    今天小编就为大家分享一篇关于Python中dict和set的用法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Python编程matplotlib绘图挑钻石seaborn小提琴和箱线图

    Python编程matplotlib绘图挑钻石seaborn小提琴和箱线图

    这篇文章主要为大家介绍了Python编程如何使用matplotlib绘图来挑出完美的钻石以及seaborn小提琴和箱线图,有需要的朋友可以借鉴参考下,希望能够优速帮助
    2021-10-10
  • python中数字列表转化为数字字符串的实例代码

    python中数字列表转化为数字字符串的实例代码

    先前学习过,数字和字符串都可以存储到变量当中,下面这篇文章主要给大家介绍了关于python中数字列表转化为数字字符串的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Python的加密模块md5、sha、crypt使用实例

    Python的加密模块md5、sha、crypt使用实例

    这篇文章主要介绍了Python的加密模块md5、sha、crypt使用实例,本文给出了MD5和crypt模块的代码实例,需要的朋友可以参考下
    2014-09-09
  • TensorFlow Session使用的两种方法小结

    TensorFlow Session使用的两种方法小结

    今天小编就为大家分享一篇TensorFlow Session使用的两种方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python中强大的命令行库click入门教程

    Python中强大的命令行库click入门教程

    click是Python的一个命令行工具,极其好用。不信?一试便知。下面这篇文章主要给大家介绍了Python中强大的命令行库click,需要的朋友可以参考学习,下面来一起看看吧。
    2016-12-12
  • Python中扩展包的安装方法详解

    Python中扩展包的安装方法详解

    这篇文章主要给大家总结了关于Python中扩展包的安装方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06

最新评论