pandas 常用操作整理 - Python

现在总结一下,之前使用过的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]})  # 创建一个DataFrame
    print(df)

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

    # 删除行 -- drop 原始对象不变,返回删除后的对象。
    df = df.drop(0)
    print(df)


if __name__ == '__main__':
    demo()

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

(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)  # 列数

声明: 总结学习,有问题或不妥之处,可以批评指正哦。

官方学习链接其他学习链接

猜你喜欢

转载自blog.csdn.net/XX_123_1_RJ/article/details/83379093