分享

Pandas处理数据增、删、改、查,日常使用小结,清晰版

 白河baihe 2023-08-30 发布于浙江

图片


ISEE小语


论如何判断一个人是真有钱还是装有钱?

在网上看到这样的一个回答:

“穷人是小心翼翼地大方,有钱人是大大方方地小气。



回顾上篇

图片

Flask+pyecharts+SQLAlchemy,统计图的数据存放在mysql中

ISEE小栈,公众号:ISEE小栈Flask+pyecharts+SQLAlchemy,统计图的数据存放在mysql中,综合版

开始本篇


Pandas是一个强大的数据分析工具,可以用于处理数据的增、删、改、查操作。下面是一些常见的操作方法。


环境:

Pycharm

Python 3.9.16


安装:

pip install pandas==2.0.0

导入:

import pandas as pd

新增

1 插入行

使用df.loc方法插入数据

插入单行
# 创建一个空的DataFrame对象df = pd.DataFrame(        columns=['series1', 'series2', 'series3', 'series4'])# 定义要插入的数据row = {'series1': 1, 'series2': 2, 'series3': 3, 'series4': 4}df.loc[df.shape[0]] = rowprint(df)

结果:

图片

插入多行
# 创建一个空的DataFrame对象df = pd.DataFrame( columns=['series1', 'series2', 'series3', 'series4'])# 定义要插入的数据rows = [{'series1': 1, 'series2': 2, 'series3': 3, 'series4': 4}, {'series1': 9, 'series2': 8, 'series3': 7, 'series4': 6}]for r in rows: df.loc[df.shape[0]] = rprint(df)

结果:

图片

使用pd.concat()方法插入数据

请注意,Pandas2.0及以上版本已经删除DataFrame.append()插入数据的方法

其中ignore_index=True,指是否重新生成索引

插入单行
# 创建一个空的DataFrame对象df = pd.DataFrame(        columns=['series1', 'series2', 'series3', 'series4'])# 定义要插入的数据row = {'series1': 'a', 'series2': 'b', 'series3': 'c', 'series4': 'd'}df = pd.concat([df, pd.DataFrame(row, index=[0])], ignore_index=True)print(df)

结果:

图片

插入多行
# 创建一个空的DataFrame对象df = pd.DataFrame(columns=['series1', 'series2', 'series3', 'series4'])# 定义要插入的数据rows = [{'series1': 'e', 'series2': 'f', 'series3': 'g', 'series4': 'h'}, {'series1': 'i', 'series2': 'j', 'series3': 'k', 'series4': 'l'}]df = pd.concat([df, pd.DataFrame(rows)], ignore_index=True)print(df)

结果:

图片

2 插入列

插入列可以使用赋值操作符(=)或者使用insert()方法

首先,先初始DataFrame

同以上插入多行后的DataFrame为例,在其基础上进行插入列

插入一列

在DataFrame中直接创建新的列,即在以上df中追加插入一列

df['series5'] = [1, 2]print(df)

结果:

图片

插入多列

在DataFrame中直接创建新的列,即在以上df中追加插入多列

df[['series5', 'series6']] = [[1, 2], [3, 4]]print(df)

结果:

图片

指定位置插入列

在DataFrame中的指定位置插入列

# 在第二列的位置插入一列df.insert(loc=1, column='series5', value=[3, 4])  print(df)

结果:

图片

删除

1 删除行

要在Pandas中删除指定的一行或多行数据,使用drop()方法。

注意inplace=True参数指示drop()方法在原位修改数据,而不返回任何新的DataFrame。

首先,准备操作数据

# 创建DataFramedata = {'series1': ['a', 'e', 'i', 'm', 'q', 'u'], 'series2': ['b', 'f', 'j', 'n', 'r', 'v'], 'series3': ['c', 'g', 'k', 'o', 's', 'w'], 'series4': ['d', 'h', 'l', 'p', 't', 'x']}df = pd.DataFrame(data)print(df)

结果:

图片

删除单行

如删除指定索引的第一行

df = df.drop(0)print(df)

结果:

图片

删除多行

df = df.drop([1, 2])

图片

这时,发现以上删除操作后,索引可能会出现不连续的情况。如果希望重新排序索引以使其连续,可以使用reset_index()方法。

df.reset_index(drop=True, inplace=True)print(df)

结果:

图片

2 删除列

要在Pandas中删除指定的列的数据,也是使用drop()方法。

可以通过传递列名称或者传递列索引,这两方法进行删除

首先,准备操作数据

# 创建DataFramedata = {'series1': ['a', 'e', 'i', 'm', 'q', 'u'],        'series2': ['b', 'f', 'j', 'n', 'r', 'v'],        'series3': ['c', 'g', 'k', 'o', 's', 'w'],        'series4': ['d', 'h', 'l', 'p', 't', 'x']}df = pd.DataFrame(data)print(df)

结果:

图片

删除指定series2列的数据

# 传递列名称列表df.drop('series2', axis=1, inplace=True)# 或者通过索引删除第二列# df.drop(df.columns[1], axis=1, inplace=True)print(df)

结果:

图片

继以上操作,再同时删除指定series1和series3

# 传递列名称列表df.drop(['series1', 'series3'], axis=1, inplace=True)# 或者通过索引删除# df.drop(df.columns[[0, 1]], axis=1, inplace=True)print(df)

结果:

图片

修改

1 修改行

可以通过索引条件来定位到指定的行进行修改,使用到了df.loc方法

注意,通过索引或条件来定位这两种方式,有一个小小的区别,那就是索引,修改的是整行数据,而条件定位,可以修改指定行中某列的单个数据。

相比较第二种条件来定的方式,更加精准。

首先,准备操作数据

# 创建DataFramedata = {'series1': ['a', 'e', 'i', 'm', 'q', 'u'], 'series2': ['b', 'f', 'j', 'n', 'r', 'v'], 'series3': ['c', 'g', 'k', 'o', 's', 'w'], 'series4': ['d', 'h', 'l', 'p', 't', 'x']}df = pd.DataFrame(data)print(df)

结果:

图片

例,将第一行数据修改为1,2,3,4

# 通过索引定位并修改行数据df.loc[0] = [1, 2, 3, 4]# 或者通过条件定位并修改行数据# condition = df['series1'] == 'a'# df.loc[condition, 'series1'] = 1# df.loc[condition, 'series2'] = 2# df.loc[condition, 'series3'] = 3# df.loc[condition, 'series4'] = 4print(df)

结果:

图片

2 修改列

可以通过列名或索引来定位到指定的列,并修改相应的值

注意,这两种方式都是修改整列的数据。

首先,准备操作数据

# 创建DataFramedata = {'series1': ['a', 'e', 'i', 'm', 'q', 'u'], 'series2': ['b', 'f', 'j', 'n', 'r', 'v'], 'series3': ['c', 'g', 'k', 'o', 's', 'w'], 'series4': ['d', 'h', 'l', 'p', 't', 'x']}df = pd.DataFrame(data)print(df)

结果:

图片

例,将第二列数据修改为1,2,3,4,5,6

# 通过列名定位并修改列数据df['series2'] = [1, 2, 3, 4, 5, 6]# 或通过列索引定位并修改列数据# df.iloc[:, 1] = [1, 2, 3, 4, 5, 6]print(df)

结果:

图片

查询

1 查询行

可以使用loc[]条件表达式query()方法来查询DataFrame中的指定数据

注意,loc[]方法适用于精确的行和列标签查询,条件表达式可用于基于条件过滤数据,query()方法可以实现更复杂灵活的查询

首先,准备操作数据

# 创建DataFramedata = {'series1': ['a', 'e', 'i', 'm', 'q', 'u'], 'series2': ['b', 'f', 'j', 'n', 'r', 'v'], 'series3': ['c', 'g', 'k', 'o', 's', 'w'], 'series4': ['d', 'h', 'l', 'p', 't', 'x']}df = pd.DataFrame(data)print(df)

结果:

图片

例,查询第一列的第一行的数据

value = df.loc[0, 'series1']print('series1列第一行的数据为: ', value)

结果:

图片

例,使用条件表达式查询列名称为series1,数据为'e'的那一行数据

condition = df['series1'] == 'e'value = df.loc[condition]print(value)

结果:

图片

例,使用query()方法进行查询列名称为series2,数据包含'n'的那一行数据

value = df.query('series2.str.contains('n')')print(value)

结果:

图片

使用query()方法进行高级查询时,可以使用多种方式来指定查询条件,

如大于(>)、小于(<)、等于(==)、不等于(!=)、逻辑与(and)、逻辑或(or)等。同时,我们也可以使用括号来分组条件表达式,以便实现更复杂的查询。

2 查询列

可以通过指定的列名使用iloc索引进行查询

首先,准备操作数据

# 创建DataFramedata = {'series1': ['a', 'e', 'i', 'm', 'q', 'u'], 'series2': ['b', 'f', 'j', 'n', 'r', 'v'], 'series3': ['c', 'g', 'k', 'o', 's', 'w'], 'series4': ['d', 'h', 'l', 'p', 't', 'x']}df = pd.DataFrame(data)print(df)

结果:

图片

例,通过指定的列名,查询series1列的数据

column_value = df.series1# 或# column_value = df['series1']print(column_value)

结果:

图片

例,通过列索引,查询series1列的数据

# 获取第一列的数据column_value = df.iloc[:, 0]print(column_value)


结果:

图片

总结

Pandas非常强大,以上仅为日常基本操作,只作入门记录。

每个操作均有独立的测试数据,本次随记更加清晰易懂。

寄语:世间三美,明月,清风,眼前……图片


看到这儿的朋友帮点个“”和“在看”,谢谢支持~!

图片     

文章就分享到这儿,喜欢就点个吧!图片


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约