Pandas处理数据增、删、改、查操作
Pandas处理数据增、删、改、查,日常使用小结,清晰版
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]] = row
print(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]] = r
print(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。
首先,准备操作数据
# 创建DataFrame
data = {'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()方法。
可以通过传递列名称或者传递列索引,这两方法进行删除
首先,准备操作数据
# 创建DataFrame
data = {'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方法
注意,通过索引或条件来定位这两种方式,有一个小小的区别,那就是索引,修改的是整行数据,而条件定位,可以修改指定行中某列的单个数据。
相比较第二种条件来定的方式,更加精准。
首先,准备操作数据
# 创建DataFrame
data = {'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]
print(df)
结果:
2 修改列
可以通过列名或索引来定位到指定的列,并修改相应的值
注意,这两种方式都是修改整列的数据。
首先,准备操作数据
# 创建DataFrame
data = {'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()方法可以实现更复杂灵活的查询
首先,准备操作数据
# 创建DataFrame
data = {'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索引进行查询
首先,准备操作数据
# 创建DataFrame
data = {'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非常强大,以上仅为日常基本操作,只作入门记录。
每个操作均有独立的测试数据,本次随记更加清晰易懂。
寄语:世间三美,明月,清风,眼前……
看到这儿的朋友帮点个“赞”和“在看”,谢谢支持~!
文章就分享到这儿,喜欢就点个赞吧!
推荐阅读 点击标题可跳转