现在总结一下,之前使用过的pandas常用方法,或者小技巧。

(1)根据条件,选取多行数据:

看一个例子:

# @Time   :2018/10/27
# @Author :LiuYinxing

import pandas as pd

def demo():
    df = pd.DataFrame({'name':['tom', 'jok', 'cat', 'car'], 'score': [98, 66, 78, 100]})  # 创建一个DataFrame

    # 获取 name = tom, cat 的信息
    getdata = df[df['name'].isin(['tom', 'cat'])]
    print(getdata)

    # 获取 66 < score < 100 的信息
    getdata = df[(df['score'] > 66) & (df['score'] < 100)]
    print(getdata)

    # 获取 score == 66 or score == 100 的信息
    getdata = df[(df['score'] == 66) | (df['score'] == 100)]
    print(getdata)

if __name__ == '__main__':
    demo()

注意:pandas按条件获取多行数据时,一般要用数学逻辑符号,例如:&|。逻辑符号不能用 andnot等。

(2)删除操作:

看例子:

# @Time   :2018/10/27
# @Author :LiuYinxing


import pandas as pd


def demo():
    df = pd.DataFrame({'name':['tom', 'jok', 'cat', 'car'],
                       'score': [98, 66, 78, 100],
                       'score1': [98, 66, 78, 100]})  # 创建一个DataFrame
    print(df)

    # 删除列 -- pop 修改发生在原始的对象上。
    df.pop('name')
    print(df)

    # 按照列名 -- 进行多列删除
    # -- axis=1 表示按列方向、
    # -- inplace=True 表示在原数据上修改
    df['name'] = ['tom', 'jok', 'cat', 'car']

    df.drop(['score', 'score1'], axis=1, inplace=False)
    print(df)

    # 按照序号 -- 进行多列删除
    col = [1, 2]  # 要删除的列号
    df.drop(df.columns[col], axis=1, inplace=False)
    print(df)

    df = pd.DataFrame({'name':['tom', 'jok', 'cat', 'car'],
                       'score': [98, 66, 78, 100],
                       'score1': [98, 66, 78, 100]})  # 创建一个DataFrame
    # 删除行 -- drop 原始对象不变,返回删除后的对象。
    df.drop(0)

    # 删除多行
    df.drop([0, 1], inplace=True)  # 默认axis=0
    print(df)


if __name__ == '__main__':
    demo()

注意:pandas 在列删中pop()是在原实例上的操作,而行删除drop()默认返回删除之后的结果,不修改之前的实例,此外还有一点是,如果 index 有重复的,则会删除多行。其他用法可以继续探究:

drop(self, labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
# 参数不在解析>_<
(3)合并、关联操作:

pandas 提供的 pd.merge() 函数,可以实现类似于SQL中的join操作。

merge(left, right, how='inner', on=None, left_on=None, right_on=None,
          left_index=False, right_index=False, sort=False,
          suffixes=('_x', '_y'), copy=True, indicator=False,
          validate=None)

主要参数解析:

参数

含义

备注

leftright

要合并的两个DataFrame对象

on

按某一列连接

两个pd要存在相同的列名,可以是多列

left_onright_on

用那一列作为键

可以是列名

left_indexright_index

使用哪个pd的索引作为键

how

连接方式 leftrightouter(类似于并集),inner(类似于交集)

与SQL中join操作的连接一样

sort

对结果进行字典排序

有时可提高性能

python例子:

# @Time   :2018/10/28
# @Author :LiuYinxing

import pandas as pd

def demo():
    df1 = pd.DataFrame({'name': ['tom', 'jok', 'cat', 'car'], 'score1': [98, 66, 78, 100]})  # 创建一个DataFrame对象
    df2 = pd.DataFrame({'name': ['tom', 'jok', 'cat'], 'score2': [98, 66, 78]})  # 创建一个DataFrame对象

    rs = pd.merge(df1, df2, on='name', how='left')
    rs = rs.fillna(0)  # 缺失值 补全

    print(rs)

if __name__ == '__main__':
    demo()
(4)缺失数据处理:

还是看例子吧:

# @Time   :2018/10/28
# @Author :LiuYinxing

import pandas as pd

def demo():
    df = pd.DataFrame({'name': ['tom', 'jok', 'cat', 'car'], 'score': [98, None, 78, None]})  # 创建一个DataFrame对象

    # 缺失值 填充
    rs = df.fillna(0)  # 缺失值 填充为 0
    print(rs)
    rs = df.fillna(method='pad')  # 缺失值 填充向前看齐
    print(rs)
    rs = df.fillna(method='bfill')  # 缺失值 填充向后看齐
    print(rs)

    # 缺失值 查询
    print(df['score'].isnull())
    print(df['score'].notnull())

    # 删除缺失值
    # dropna函数,其中axis参数默认axis = 0行上操作(删除正行,1 则删除整列)
    rs = df.dropna(axis=0)  # 缺失值 行删除
    print(rs)

    rs = df.dropna(axis=1)  # 缺失值 列删除
    print(rs)

if __name__ == '__main__':
    demo()

注意:上面这些操作,不在原始的实例上处理,则是返回删除之后的结果

(5)列类型转换:

astype强制转换,适合多列。

df[['A', 'B']] = df[['A', 'B']].astype(float)
(6)获取行数和列数:
row_count = len(df.index)  # 行数
loc_count = len(df)  # 列数