Jocx's blog

来了就先看看吧,没准有用呢?

0%

【语法】Python包——Pandas内容速查

Pandas内容速查

引入Pandas包

使用此包前,需要import pandas。没有包的可以用pip或者pycharm里面下载。

DataFrame类

说明

这个是Pandas里面的基础对象,是一个有且从零开始的index的表格。

构造函数

  • pd.DataFrame():创建一个空的DataFrame对象。

常用的关键字有data, index, columns,默认都是None。一般通过关键字赋值参数的方法来进行构造

1
2
3
4
5
6
import pandas as pd
df = pd.DataFrame(data=[[1, 1], [2, 2]], index=[0, 1], columns=['A', 'B'])
print(df)
# A B
# 1 1 1
# 2 2 2

字典和numpy对象也可以构造DataFrame对象

用字典构造的话,key就等于columns

Series类

说明

这个是一个数据序列类。可以用于存放各种数据,包括一些数据的操作和构造DataFrame类。也是Pandas里面的一个基础类

DataFrame里面的每一列就是一个Series对象

注意:Series对象可__迭代__看__映射__

构造函数

  • pd.Series():创建一个空的序列对象
  • pd.Series(lst):用列表对象lst创建一个Series对象

数据的导入与导出

导入数据

以下导入对象全是用

  • pd.read_csv(filename):从CSV文件导入数据
  • pd.read_table(filename):从限定分隔符的文本文件导入数据,诸如.tsv文件
  • pd.read_excel(filename):从Excel文件导入数据
  • pd.read_json(json_string):从JSON格式的字符串导入数据
  • pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格。
  • pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据。这个常用于在IDE内部构造
  • pd.read_sql(query, connection_object):从SQL表/库导入数据

导出数据

处理结束后的导出

  • df.to_csv(filename):导出数据到CSV文件
  • df.to_excel(filename):导出数据到Excel文件
  • df.to_sql(table_name, connection_object):导出数据到SQL表
  • df.to_json(filename):以Json格式导出数据到文本文件

在所有方法里面的将关键字形参index=False可以除掉索引

在程序内数据结构类型转换

  • NPobj = df.to_numpy():变成numpy对象
  • Listobj =df.values.tolist():将除了标题的地方变成list对象
  • df.set_index(key).T.to_dict():变成复合字典。df是DataFrame对象;key是标题里面的某个值(用前最好检查key存不存在)

数据处理

初步信息

  • df.count():返回每一列中的非空值的个数
  • df.shape:这里调用的是__属性__,可以查看矩阵的行列数
  • df.info():返回列表的内存、类型、列名等基础信息
  • s.value_counts():统计这一列中每个单独数据出现的次数
  • df.keys():获得信息头,是一个Index实例,是可以迭代的

数据计算

  • df.sum():使这一列相加,并且视NaN为0
  • df.max():返回每一列的最大值
  • df.min():返回每一列的最小值

数学统计

  • df.describe():查看数值类型数据每列的汇总统计。有min max count mean std
  • df.mean():返回所有列的均值_(这里需要注意一下,我的电脑跑不出来,只能存describe()里查看)_
  • df.std():返回每一列的标准差
  • df.median():返回每一列的中位数
  • df.corr():返回列与列之间的相关系数

分割数据

行式分割

  • df.head(n):n是整数,代表要取前n行形成新的DataFrame
  • df.tail(n):n是整数,代表要取后n行形成新的DataFrame

列式分割

  • df['name']:name是列的名字。返回一个Series对象,包含那一列。如果name有多个,那么返回一个DataFrame对象

切片操作

  • s = df.iloc[a, b]:a,b这里不是某个对象,是切片操作。iloc切片只能接受位置数字的值(从0开始)

    1
    2
    # df是某个DataFrame对象
    s1 = df.iloc[:, [0, 2]] # 切出第1列和第3列的所有行
  • s = df.loc[a, b]:具体同上,loc只接受索引

    1
    2
    # df是某个DataFrame对象
    s1 = df.loc[[0, 8], ['star_rating']] # 切出第1行和第9行的‘star_rating’列

条件筛选

  • df = df[df['label'] == condition]:条件筛选,把所有['label']列为condition的都给筛选出来。

  • 数据类型筛选

    1
    2
    3
    # 获得相关类型的数据
    df = df.select_dtypes(exclude='object') # 除了'object'数据类型以外的数据
    df2 = df2.select_dtypes(include='number') # 只有'number'数据类型的数
    1
    2
    3
    4
    5
    6
    # 需要获得数据列名的情况
    col = df.select_dtypes(exclude='object').columns
    col2 = df.select_dtypes(include='number').columns

    df2 = df.loc[:,col] # 除了'object'数据类型以外的数据
    df3 = df.loc[:,col2] # 只有'number'数据类型的数据

合并数据

这里将说明行或者列__相同__的情况下

  • df1 = df1.append(df2):将df2添加到df1行的后面。df1,df2都是DataFrame对象,__注意__这里的append()是有返回值的,和列表的append不一样!!!!!
  • df = pd.concat(frame, axis=0):将将frame里面的所有DataFrame对象整合后,添加到df行的后面。这里的frame是装着DataFrame的列表
  • 列数相同的话,直接df['columns_name'] = s就可以了,s指列数与原来相同但列名不同的Series对象

列数不同并且要进行添加的方法

  • 删除index法

    1
    2
    3
    4
    5
    6
    7
    import pandas as pd

    # 将索引消除,这一步对于列数不同的序列合并至关重要
    df1 = df1.reset_index(drop=True)
    df2 = df2.reset_index(drop=True)
    # 用concat函数将其连接
    df = pd.concat([df1, df2], axis=1) # axis要是1

判断和删除删除重复的项

  • df.duplicated():判断有无重复的项
  • df.drop_duplicates():删除重复的项,如果对Series使用则还是Series
  • 注意:这里重复的项都是只所有列均一样的_重复_

替换数据

  • ```python df["bj"].fillna(df["sz"],inplace=True) # 用"sz"列的同行数据将"bj"列的空值替换掉

    1
    2
    3

    * ```python
    df.loc[df["sz"].isin([2,6]),"sz"]=-4 # 在1的基础上,将"sz"列为2或者6的数据替换成-4

  • replace

-------------本文结束 感谢您的阅读-------------