比较系统的学习Pandas(8)—添加与修改

这篇具有很好参考价值的文章主要介绍了比较系统的学习Pandas(8)—添加与修改。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、修改数值

修改具体的数值

在Pandas中修改数值非常简单,先筛选出需要修改的数值范围,再 为这个范围重新赋值。

df.iloc[0,0] = 'Lily' # 修改值
df.iloc[0,0] # 查看结果               #Lily
修改大范围的值
# 将小于60分的成绩修改为60
df[df.Q1 < 60] = 60


#按对应的索引位进行修改

# 筛选数据
df.loc[1:3, 'Q1':'Q2']
'''
Q1 Q2
1 60 60
2 60 60
3 93 96
'''

# 指定修改的目的数据
df1 = pd.DataFrame({'Q1':[1,2,3],'Q2':[4,5,6]})
df1
'''
Q1 Q2
0 1 4
1 2 5
2 3 6
'''

# 执行修改
df.loc[1:3, 'Q1':'Q2'] = df1

# 查看结果
df.loc[1:3, 'Q1':'Q2']
'''
Q1 Q2
1 2.0 5.0
2 3.0 6.0
3 NaN NaN
'''

2、替换数据

replace方法可以对数据进行批量替换


df.replace(0, 5) # 将数据中的所有0换为5

df.replace([0, 1, 2, 3], 4) # 将0~3全换成4

df.replace([0, 1, 2, 3], [4, 3, 2, 1]) # 对应修改

# {'pad', 'ffill', 'bfill', None} 试试

s.replace([1, 2], method='bfill') # 向下填充

df.replace({0: 10, 1: 100}) # 字典对应修改

df.replace({'Q1': 0, 'Q2': 5}, 100) # 将指定字段的指定值修改为100

df.replace({'Q1': {0: 100, 4: 400}}) # 将指定列里的指定值替换为另一个指定的值

# 使用正则表达式
df.replace(to_replace=r'^ba.$', value='new', regex=True)

df.replace({'A': r'^ba.$'}, {'A': 'new'}, regex=True)

df.replace(regex={r'^ba.$': 'new', 'foo': 'xyz'})

df.replace(regex=[r'^ba.$', 'foo'], value='new')
3、填充空值

fillna对空值填入指定数据,通常应用于数据清洗。

df.fillna(0) # 将空值全修改为0      默认为None

df.fillna(method='ffill') # 将空值都修改为其前一个值

values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}

df.fillna(value=values) # 为各列填充不同的值

df.fillna(value=values, limit=1) # 只替换第一个
4、修改索引名

修改索引名最简单也最常用的办法就是将df.index和df.columns重新 赋值为一个类似于列表的序列值,这会将其覆盖为指定序列中的名称。使用df.rename和df.rename_axis对轴名称进行修改

#例将列名team修改为class
df.rename(columns={'team':'class'})

df.rename(columns={"Q1": "a", "Q2": "b"}) # 对表头进行修改

df.rename(index={0: "x", 1: "y", 2: "z"}) # 对索引进行修改

df.rename(index=str) # 对类型进行修改

df.rename(str.lower, axis='columns') # 传索引类型

df.rename({1: 2, 2: 4}, axis='index')

# 对索引名进行修改
s.rename_axis("animal")

df.rename_axis("animal") # 默认是列索引

df.rename_axis("limbs", axis="columns") # 指定行索引

# 索引为多层索引时可以将type修改为class

df.rename_axis(index={'type': 'class'})

# 可以用set_axis进行设置修改

s.set_axis(['a', 'b', 'c'], axis=0)

df.set_axis(['I', 'II'], axis='columns')

df.set_axis(['i', 'ii'], axis='columns', inplace=True)
5、增加列
# 四个季度的成绩相加为总成绩

df['total'] = df.Q1 + df.Q2 + df.Q3 + df.Q4

df['total'] = df.sum(1) # 与以上代码效果相同


df['foo'] = 100 # 增加一列foo,所有值都是100

df['foo'] = df.Q1 + df.Q2 # 新列为两列相加

df['foo'] = df['Q1'] + df['Q2'] # 同上


# 把所有为数字的值加起来
df['total'] = df.select_dtypes(include=['int']).sum(1)

df['total'] = df.loc[:,'Q1':'Q4'].apply(lambda x: sum(x), axis='columns')

df.loc[:, 'Q10'] = '我是新来的' # 也可以


# 增加一列并赋值,不满足条件的为NaN
df.loc[df.num >= 60, '成绩'] = '合格'

df.loc[df.num < 60, '成绩'] = '不合格'
6、插入列df.insert()

Pandas提供了insert()方法来为DataFrame插入一个新列。insert()方法 可以传入三个主要参数:loc是一个数字,代表新列所在的位置,使用 列的数字索引,如0为第一列;第二个参数column为新的列名;最后一 个参数value为列的值,一般是一个Series。

# 在第三列的位置上插入新列total列,值为每行的总成绩
df.insert(2, 'total', df.sum(1))
7、指定列df.assign()

df.assign(k=v)为指定一个新列的操作,k为新列的列名,v为此列的 值,v必须是一个与原数据同索引的Series。

# 增加total列
df.assign(total=df.sum(1))

# 增加两列
df.assign(total=df.sum(1), Q=100)

df.assign(total=df.sum(1)).assign(Q=100) # 效果同上


#我们再增加两列name_len和avg,name_len值为name的长度,avg为平均分。这时有了过多的assign语句,为了美观整齐,将代码放在括号里

(
df.assign(total=df.sum(1)) # 总成绩
.assign(Q=100) # 目标满分值
.assign(name_len=df.name.str.len()) # 姓名长度
.assign(avg=df.mean(1)) # 平均值
.assign(avg2=lambda d: d.total/4) # 平均值2
)





df.assign(Q5=[100]*100) # 新增加一列Q5
df = df.assign(Q5=[100]*100) # 赋值生效
df.assign(Q6=df.Q2/df.Q1) # 计算并增加Q6
df.assign(Q7=lambda d: d.Q1 * 9 / 5 + 32) # 使用lambda
# 添加一列,值为表达式结果:True或False
df.assign(tag=df.Q1>df.Q2)
# 比较计算,True为1,False为0
df.assign(tag=(df.Q1>df.Q2).astype(int))
# 映射文案
df.assign(tag=(df.Q1>60).map({True:'及格',False:'不及格'}))
8、执行表达式df.eval()

df.eval()与之前介绍过的df.query()一样,可以以字符的形式传入表 达式,增加列数据。

# 传入求总分表达式
df.eval('total = Q1+Q3+Q3+Q4')


df['C1'] = df.eval('Q2 + Q3')

df.eval('C2 = Q2 + Q3') # 计算

a = df.Q1.mean()

df.eval("C3 = `Q3`+@a") # 使用变量

df.eval("C3 = Q2 > (`Q3`+@a)") # 加一个布尔值

df.eval('C4 = name + team', inplace=True) # 立即生效
9、增加行

可以使用loc[]指定索引给出所有列的值来增加一行数据。

# 新增索引为100的数据
df.loc[100] = ['tom', 'A', 88, 88, 88, 88]

df.loc[101]={'Q1':88,'Q2':99} # 指定列,无数据列值为NaN

df.loc[df.shape[0]+1] = {'Q1':88,'Q2':99} # 自动增加索引

df.loc[len(df)+1] = {'Q1':88,'Q2':99}


# 批量操作,可以使用迭代

rows = [[1,2],[3,4],[5,6]]
for row in rows:
    df.loc[len(df)] = row
10、追加合并
df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))
df.append(df2)

#pd.concat([s1, s2])可以将两个df或s连接起来:

s1 = pd.Series(['a', 'b'])

s2 = pd.Series(['c', 'd'])

pd.concat([s1, s2])

pd.concat([s1, s2], ignore_index=True) # 索引重新编

# 原数索引不变,增加一个一层索引(keys里的内容),变成多层索引

pd.concat([s1, s2], keys=['s1', 's2'])

pd.concat([s1, s2], keys=['s1', 's2'],names=['Series name', 'Row ID'])

# df同理
pd.concat([df1, df2])

pd.concat([df1, df3], sort=False)

pd.concat([df1, df3], join="inner") # 只连相同列

pd.concat([df1, df4], axis=1) # 连接列
11、删除

删除有两种方法,一种是使用pop()函数。使用pop(),Series会删除 指定索引的数据同时返回这个被删除的值,DataFrame会删除指定列并 返回这个被删除的列。以上操作都是实时生效。

还有一种方法是使用反选法,将需要的数据筛选出来赋值给原变 量,最终实现删除。

# 删除索引为3的数据
s.pop(3)


# 删除Q1列
df.pop('Q1')
删除空值

dropna()方法,能够找到DataFrame类型数据的空值(缺失值),将空值所在的行/列删除后,将新的DataFrame作为返回值返回。

1.函数详解

函数形式:dropna(axis=0, how=’any’, thresh=None, subset=None, inplace=False)

参数:

axis:轴。0或’index’,表示按行删除;1或’columns’,表示按列删除。

how:筛选方式。‘any’,表示该行/列只要有一个以上的空值,就删除该行/列;‘all’,表示该行/列全部都为空值,就删除该行/列。

thresh:非空元素最低数量。int型,默认为None。如果该行/列中,非空元素数量小于这个值,就删除该行/列。

subset:子集。列表,元素为行或者列的索引。如果axis=0或者‘index’,subset中元素为列的索引;如果axis=1或者‘column’,subset中元素为行的索引。由subset限制的子区域,是判断是否删除该行/列的条件判断区域。

inplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操作,返回值为None。文章来源地址https://www.toymoban.com/news/detail-544371.html

df.dropna() # 一行中有一个缺失值就删除

df.dropna(axis='columns') # 只保留全有值的列

df.dropna(how='all') # 行或列全没值才删除

df.dropna(thresh=2) # 至少有两个空值时才删除

df.dropna(inplace=True) # 删除并使替换生效



# 按列删除:该列非空元素小于5个的,即删除该列
print(d.dropna(axis='columns', thresh=5))



# 设置子集:删除第0、5、6、7列都为空的行
df.dropna(axis='index', how='all', subset=[0,5,6,7],inplace=True)


# 设置子集:删除第5、6、7行存在空值的列
df.dropna(axis=1, how='any', subset=[5,6,7],inplace=True)

到了这里,关于比较系统的学习Pandas(8)—添加与修改的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【头歌】——数据分析与实践-python-Pandas 初体验-Pandas数据取值与选择-Pandas进阶

    第1关 了解数据处理对象–Series 第2关 了解数据处理对象-DataFrame 第3关 读取 CSV 格式数据 第4关 数据的基本操作——排序 第5关 数据的基本操作——删除 第6关 数据的基本操作——算术运算 第7关 数据的基本操作——去重 第8关 数据重塑 第1关 Series数据选择 第2关 DataFrame数据

    2024年01月22日
    浏览(60)
  • 【数据分析 - 基础入门之pandas篇②】- pandas数据结构——Series

    大家好!我是一朵向阳花(花花花),本期跟大家分享的知识是 pandas 数据结构——Series。 作者的【 Python 数据分析】专栏正在火热更新中,如果本文对您有帮助,欢迎大家点赞 + 评论 + 收藏 ! 每日金句分享: 愿你有一天,能和你最重要的人重逢。』—— 艾拉「可塑性记忆

    2024年02月13日
    浏览(32)
  • 【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame

    大家好!我是一朵向阳花(花花花)🍭,本期跟大家分享的知识是 pandas 数据结构——DataFrame。 作者的【 Python 数据分析】专栏正在火热更新中🔥,如果本文对您有帮助,欢迎大家点赞 + 评论 + 收藏 ! 每日金句分享: 慢慢来,谁还没有一个努力的过程。』—— pony「网易云

    2024年02月16日
    浏览(32)
  • pandas:如何保存数据比较好?

    我们在使用 pandas 处理完数据之后,最终总是要把数据作为一个文件保存下来, 那么,保存数据最常用的文件是什么呢? 我想大部分人一定会选择 csv 或者 excel 。 刚接触数据分析时,我也是这么选择的,不过,今天将介绍几种不一样的存储数据的文件格式。 这些文件格式各

    2024年03月15日
    浏览(24)
  • 数据分析| Pandas200道练习题,使用Pandas连接MySQL数据库

    通过pandas实现数据库的读,写操作时,首先需要进行数据库的连接,然后通过调用pandas所提供的数据库读写函数与方法来实现数据库的读写操作。 Pandas提供了3个函数用于数据库的读操作 read_sql_query() 可以实现对数据库的查询操作,但是不能直接读取数据库中的某个表,需要

    2024年01月16日
    浏览(42)
  • 数据分析 — Pandas 数据处理

    Pandas (Python Data Analysis Library)是一个基于 NumPy 的 数据分析工具 ,专为解决数据分析任务而创建。它汇集了大量库和一些标准的数据模型,可以更高效地操作大型数据集。 数据结构: Pandas 提供了两种主要的数据结构,即 Series 和 DataFrame ,用于处理 一维和二维 数据。 标签

    2024年02月22日
    浏览(38)
  • pandas数据分析之数据绘图

    一图胜千言,将信息可视化(绘图)是数据分析中最重要的工作之一。它除了让人们对数据更加直观以外,还可以帮助我们找出异常值、必要的数据转换、得出有关模型的想法等等。pandas 在数据分析、数据可视化方面有着较为广泛的应用。本文将通过实例介绍pandas的数据绘图

    2024年02月10日
    浏览(26)
  • 《Python数据分析技术栈》第06章使用 Pandas 准备数据 01 Pandas概览(Pandas at a glance)

    《Python数据分析技术栈》第06章使用 Pandas 准备数据 01 Pandas概览(Pandas at a glance) Wes McKinney developed the Pandas library in 2008. The name (Pandas) comes from the term “Panel Data” used in econometrics for analyzing time-series data. Pandas has many features, listed in the following, that make it a popular tool for data wrang

    2024年01月23日
    浏览(33)
  • 【数据分析 - 基础入门之pandas篇①】- pandas介绍

    pandas 是 Python 的 核心数据分析支持库 ,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。 pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具 ,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。经过多年

    2024年02月13日
    浏览(30)
  • 《Python数据分析技术栈》第06章使用 Pandas 准备数据 11 pandas中的运算符 Operators in Pandas

    《Python数据分析技术栈》第06章使用 Pandas 准备数据 11 pandas中的运算符 Operators in Pandas Pandas uses the following operators that can be applied to a whole series. While Python would require a loop to iterate through every element in a list or dictionary, Pandas takes advantage of the feature of vectorization implemented in NumPy that

    2024年01月23日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包