pandas基础入门之数据修改与基本运算

2023-10-26

1.数据复制。

  • 直接赋值,

        直接赋值的话,只是复制的元数据(行列索引),但是元素还是存储在相同内存位置 对元素进行修改会影响另外一个。

import pandas as pd


import numpy as np

df=pd.DataFrame(np.arange(12).reshape(4,3),index=list("abcd"),columns=['w','y','z'])
print(df)
print(df.iloc[1,2])
df.iloc[1,2]=20
print(df.iloc[1,2])



out:
   w   y   z
a  0   1   2
b  3   4   5
c  6   7   8
d  9  10  11
5-------->>赋值之前
20-------->>赋值之后
  • copy()函数。

        copy函数,复制原数据(行列索引),还创建新的存储位置 对元素进行修改不影响另外一个。

df=pd.DataFrame(np.arange(12).reshape(4,3),index=list("abcd"),columns=['w','y','z'])
print(df)
df1=df.copy()
print(df1.iloc[1,2])
df1.iloc[1,2]=20
print(df.iloc[1,2])



out:
   w   y   z
a  0   1   2
b  3   4   5
c  6   7   8
d  9  10  11
5
5

2.增加行和列。        

  •  通过[]操作符+列名方式增加多列 新增列在最后 df[['new_column1','new_column2',...]] =
  • 通过loc+列名新增一列,不能新增多列 新增列在最后 pd.loc[:, 'new_column'] =
  • insert(loc, column, value, allow_duplicates=False)  

        loc位置参数:0 <= loc <= len(columns)     

        column:列名 新增列在中间,一次只能增加一列
 

import pandas as pd


import numpy as np

df=pd.DataFrame(np.arange(12).reshape(4,3),index=list("abcd"),columns=['w','y','z'])
print(df)
df['n']=[3,7,9,11]
df[['x','k']]=df[['w','z']]
df.loc[:,'r']=[12,13,15,16]
df.insert(1,'t',[31,56,78,5])------>>增加在第一列
print(df)



out:
   w   y   z
a  0   1   2
b  3   4   5
c  6   7   8
d  9  10  11
   w   t   y   z   n  x   k   r
a  0  31   1   2   3  0   2  12
b  3  56   4   5   7  3   5  13
c  6  78   7   8   9  6   8  15
d  9   5  10  11  11  9  11  16
  • 增加列。

        新增行在最后 通过loc函数新增一行,不能新增多行 pd.loc['new-index'] =

import pandas as pd


import numpy as np

df=pd.DataFrame(np.arange(12).reshape(4,3),index=list("abcd"),columns=['w','y','z'])
print(df)
df.loc['r']=[12,13,15]
print(df)



out:
   w   y   z
a  0   1   2
b  3   4   5
c  6   7   8
d  9  10  11
    w   y   z
a   0   1   2
b   3   4   5
c   6   7   8
d   9  10  11
r  12  13  15

 3.行列删除。

  • Del 只能删除一列 ,语法:del df['column-name'] 
  • pd.drop() 可以删除多列 pd.drop(labels,axis=1, inplace=False) ,labels:行列名称列表     axis:0表示删除行(默认),1表示删除列 ,  inplace:False表示源DataFrame不变(默认,True表示原DataFrame改变     
  • pd.pop()  只能删除一列并把删除的一列赋值给新的对象。
import pandas as pd


import numpy as np

df=pd.DataFrame(np.arange(40).reshape(5,8),index=list("abcde"),columns=['w','y','z',
                                                                     'l','m','n','o','p'])
print(df)
del df['w']
df.drop(labels=['y','l'],axis=1,inplace=True)
print(df)
data=df.pop('n')
print(df)
print(data)


out:
    w   y   z   l   m   n   o   p
a   0   1   2   3   4   5   6   7
b   8   9  10  11  12  13  14  15
c  16  17  18  19  20  21  22  23
d  24  25  26  27  28  29  30  31
e  32  33  34  35  36  37  38  39
    z   m   n   o   p
a   2   4   5   6   7
b  10  12  13  14  15
c  18  20  21  22  23
d  26  28  29  30  31
e  34  36  37  38  39
    z   m   o   p
a   2   4   6   7
b  10  12  14  15
c  18  20  22  23
d  26  28  30  31
e  34  36  38  39
a     5
b    13
c    21
d    29
e    37
Name: n, dtype: int32
  • 重复值删除。
    • 重复值查看 duplicated(subset=None, keep='first’) ,Subset 是否只需要检查某几列 KeepFirst:支持从前向后, 将后出现的相同行判断为重复值,Last:和从后向前
    • 重复值删除 drop_duplicates(subset=None, keep=’first’, inplace=False)
import pandas as pd
import numpy as np
data=pd.DataFrame({'qu1':[1,3,4,3,4],
                   'qu2':[1,3,4,3,4],
                   'qu3':[1,3,2,3,3]})
print(data)
print(data.duplicated(keep='first'))
print(data.duplicated(keep='last'))
print(data.drop_duplicates())



out:
   qu1  qu2  qu3
0    1    1    1
1    3    3    3
2    4    4    2
3    3    3    3
4    4    4    3
0    False
1    False
2    False
3     True
4    False
dtype: bool
0    False
1     True
2    False
3    False
4    False
dtype: bool
   qu1  qu2  qu3
0    1    1    1
1    3    3    3
2    4    4    2
4    4    4    3

4.改变索引。

  •    索引的不可变性,不能对索引的某个值直接进行修改。
  • 整体重命名 pd.index =, pd.columns =
import pandas as pd


import numpy as np

df=pd.DataFrame(np.arange(40).reshape(5,8),index=list("abcde"),columns=['w','y','z',
                                                                     'l','m','n','o','p'])
print(df.index)
print(df.columns)
df.index='new_'+df.index
df.columns='new'+df.columns
print(df.index)
print(df.columns)


out:
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
Index(['w', 'y', 'z', 'l', 'm', 'n', 'o', 'p'], dtype='object')
Index(['new_a', 'new_b', 'new_c', 'new_d', 'new_e'], dtype='object')
Index(['neww', 'newy', 'newz', 'newl', 'newm', 'newn', 'newo', 'newp'], dtype='object')
  • 行列同时修改 rename(index=None, columns=None, **kwargs) ,index:修改行索引名称,dict示例为{‘oldname’:‘newname’, ...} ,columns:修改列索引名称     inplace : boolean, default False(生成新对象) ,copy:inplace为False时生效,表示是否为新对象创建新的存储位置,否则只是生成元数据(行列索引)

import pandas as pd


import numpy as np

df=pd.DataFrame(np.arange(40).reshape(5,8),index=list("abcde"),columns=['w','y','z',
                                                                     'l','m','n','o','p'])
print(df.index)
print(df.columns)
df.rename(index={'a':'a1','b':'b1'},columns={'w':'w1','l':'l1'},inplace=True)
print(df.index)
print(df.columns)



out:

Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
Index(['w', 'y', 'z', 'l', 'm', 'n', 'o', 'p'], dtype='object')
Index(['a1', 'b1', 'c', 'd', 'e'], dtype='object')
Index(['w1', 'y', 'z', 'l1', 'm', 'n', 'o', 'p'], dtype='object')
  • 同时调整行或者列 reindex(index=None, columns=None, **kwargs) ,index:调整后的行索引名称列表 ,columns:调整后的列索引名称列表 ,fill_value:出现新的索引时默认的,method = ffill ffill/pad 前向填充,bfill/backfill 后向填充 。
# series reindex
data1 = pd.Series(np.arange(4), index=list('ABCD'))
print(s1)
'''
A    1
B    2
C    3
D    4
dtype: int64
'''


# 重新指定 index, 多出来的index,可以使用fill_value 填充
print(s1.reindex(index=['A', 'B', 'C', 'D', 'E'], fill_value = 10))
'''
A     1
B     2
C     3
D     4
E    10
dtype: int64
'''

s2 = Series(['A', 'B', 'C'], index = [1, 5, 10])
print(s2)
'''
1     A
5     B
10    C
dtype: object
'''

# 修改索引,
# 将s2的索引增加到15个
# 如果新增加的索引值不存在,默认为 Nan
print(s2.reindex(index=range(15)))
'''
0     NaN
1       A
2     NaN
3     NaN
4     NaN
5       B
6     NaN
7     NaN
8     NaN
9     NaN
10      C
11    NaN
12    NaN
13    NaN
14    NaN
dtype: object
'''

# ffill : foreaward fill 向前填充,
# 如果新增加索引的值不存在,那么按照前一个非nan的值填充进去
print(s2.reindex(index=range(15), method='ffill'))
'''
0     NaN
1       A
2       A
3       A
4       A
5       B
6       B
7       B
8       B
9       B
10      C
11      C
12      C
13      C
14      C
dtype: object
'''

# reindex dataframe
df1 = DataFrame(np.random.rand(25).reshape([5, 5]), index=['A', 'B', 'D', 'E', 'F'], columns=['c1', 'c2', 'c3', 'c4', 'c5'])
print(df1)
'''
         c1        c2        c3        c4        c5
A  0.700437  0.844187  0.676514  0.727858  0.951458
B  0.012703  0.413588  0.048813  0.099929  0.508066
D  0.200248  0.744154  0.192892  0.700845  0.293228
E  0.774479  0.005109  0.112858  0.110954  0.247668
F  0.023236  0.727321  0.340035  0.197503  0.909180
'''

# 为 dataframe 添加一个新的索引
# 可以看到 自动 扩充为 nan
print(df1.reindex(index=['A', 'B', 'C', 'D', 'E', 'F']))
''' 自动填充为 nan
         c1        c2        c3        c4        c5
A  0.700437  0.844187  0.676514  0.727858  0.951458
B  0.012703  0.413588  0.048813  0.099929  0.508066
C       NaN       NaN       NaN       NaN       NaN
D  0.200248  0.744154  0.192892  0.700845  0.293228
E  0.774479  0.005109  0.112858  0.110954  0.247668
F  0.023236  0.727321  0.340035  0.197503  0.909180
'''

# 扩充列, 也是一样的
print(df1.reindex(columns=['c1', 'c2', 'c3', 'c4', 'c5', 'c6']))
'''
         c1        c2        c3        c4        c5  c6
A  0.700437  0.844187  0.676514  0.727858  0.951458 NaN
B  0.012703  0.413588  0.048813  0.099929  0.508066 NaN
D  0.200248  0.744154  0.192892  0.700845  0.293228 NaN
E  0.774479  0.005109  0.112858  0.110954  0.247668 NaN
F  0.023236  0.727321  0.340035  0.197503  0.909180 NaN
'''

# 减小 index
print(s1.reindex(['A', 'B']))
''' 相当于一个切割效果
A    1
B    2
dtype: int64
'''

print(df1.reindex(index=['A', 'B']))
''' 同样是一个切片的效果
         c1        c2        c3        c4        c5
A  0.601977  0.619927  0.251234  0.305101  0.491200
B  0.244261  0.734863  0.569936  0.889996  0.017936
————————————————

5.数据排序。

  • 索引排序。pd.sort_index(axis=1, ascending=False, inplace=True)        
import pandas as pd


import numpy as np

df=pd.DataFrame(np.arange(9).reshape(3,3),index=list("acb"),columns=['w','m','z',])
print(df)
df.sort_index(axis=0,ascending=True,inplace=True)
print(df)


out:
   w  m  z
a  0  1  2
c  3  4  5
b  6  7  8
   w  m  z
a  0  1  2
b  6  7  8
c  3  4  5

df.sort_index(axis=1,ascending=True,inplace=True)
print(df)


out:
   m  w  z
a  1  0  2
c  4  3  5
b  7  6  8
  • 列值排序。pd.sort_values(by='b', ascending=False, inplace=True)
import pandas as pd
import numpy as np
data=pd.DataFrame({'qu1':[1,7,41,3,4],
                   'qu2':[1,9,4,37,4],
                   'qu3':[1,12,25,3,37]})
print(data)
data.sort_values(by='qu1',ascending=True,inplace=True)
print(data)


out:
   qu1  qu2  qu3
0    1    1    1
1    7    9   12
2   41    4   25
3    3   37    3
4    4    4   37
   qu1  qu2  qu3
0    1    1    1
3    3   37    3
4    4    4   37
1    7    9   12
2   41    4   25

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas基础入门之数据修改与基本运算 的相关文章

随机推荐

  • Redis——初识Redis

    Redis简介 Redis的数据结构致力于帮助用户解决问题 而不是像关系型数据库那样 要求用户扭曲问题来适应数据库 除此之外 通过复制 持久化和客户端分片 client side sharding 等特性 用户可以很方便的将Redis扩展成
  • 基于Qt的OpenGL编程(3.x以上GLSL可编程管线版)---(二十八)Gamma校正

    Vries的教程是我看过的最好的可编程管线OpenGL教程 没有之一 其原地址如下 https learnopengl cn github io 05 20Advanced 20Lighting 01 20Advanced 20Lighti
  • 编写一个golang websocket示例

    示例代码 创建一个websocket对象 var ws websocket Dial ws localhost 8000 echo http localhost 发送消息 if err ws Send byte hello world er
  • Latex编译中文出现的问题

    Latex编译中文出现的问题 记录一下使用latex编译中文遇到的一些问题 本文是在win11系统下使用的TexStudio MikTex组合 编译使用的是pdfLatex 编辑器的设置 首先会发现 编辑器中的中文字符全是乱码 这时 在Te
  • 应用于标签的伪类选择器(link、visited、active、hover)

    CSS3根据选择符的用途可以把选择器分为标签选择器 类选择器 ID选择器 全局选择器 组合选择器 继承选择器和伪类选择器等 伪类选择符定义的样式最常应用于 a 标签上 它表示4种不同的状态 link 未访问链接 visited 已访问链接
  • GnuWin32的安装与使用

    使用过Linux的伙计估计都会喜欢上linux各种各样强大的命令如 find vim cp mv wget curl grep ls等等 而GnuWin32使windows用户可以在命令行窗口中使用各种各样的linux命令 就跟使用普通的w
  • lighttpd不支持Expect: 100-continue的解决办法

    由于lighttpd1 4 21之前的版本不支持Expect 100 continue 所以有可能访问出现 HTTP 1 1 417 Expectation Failed 等错误提示 搜集整理了很多解决方法 如下 1 升级到 lighttp
  • Chrome:将禁用修改document.domain以放宽同源策略

    你好 我是tiantian 几天前 Chrome developer 博客发布了这么一篇文章 大致意思是 Chrome未来将禁用修改document domain 如果你的网站依赖于设置document domain 来解决跨域的问题 那么
  • ubuntu安装elasticsearch和head插件(所有可能出现的问题解决)超详细

    一 单例安装 首先去官网 elastic co 下载tar gz的压缩包 或者使用命令行下载 wget https artifacts elastic co downloads elasticsearch elasticsearch 6 7
  • 当鼠标光标放在一张图片上,如何显示另一张图片?

    我们会遇到一种情境 这种情境是当正常打开一个页面 有文字配有图片 可是当鼠标的光标移动到这张图片上时 会显示另一张图片 这种效果应该怎么做 在学习html和css阶段的程序员 我们可以使用hover来对图片进行处理 hover的基本意思为选
  • 【c语言】两个栈实现一个队列

    两个栈实现一个队列 核心思想 模拟出队列先进先出的数据结构 假设有两个栈input和output input模拟栈的数据插入 当需要模拟出队列操作时 input栈中的A B C D会按照D C B A的顺序进入栈output 只要outpu
  • TensorRT部署(图像分类)之engine生成及反序列化推理(第二讲)

    1 日志文件类创建 class TRTLogger public nvinfer1 ILogger public virtual void log Severity severity nvinfer1 AsciiChar const msg
  • adams怎么打开自带模型_少了这套Enscape专属模型库,你装的Enscapen废了一半

    文末领取此套Enscape离线资源库 真实植物 Enscape 我们一直都在用 大家也都很熟悉 而且Enscape作为渲染界的劳模 几乎可以保持月更的节奏 其操作简单 容易上手 渲染真实越来越多的被使用 虽然Enscape很好用 比Lumi
  • SAP MM学习笔记17-在库品目评价中的标准原价 S 和移动平均价格 V

    SAP中有2种价格 标准原价 S 和 移动平均价格 V 1 标准原价 S 2 移动平均价格 V 在MM03 会计1 Tab中 现行评价区域中 有原价管理区分 比如下面这个物料 100 100 它的原价管理区分是 S 它的合计额 就是 标准原
  • getch()、_sleep() 函数的正确用法

    前段时间由于需要 写了一段代码 用到了函数 getch 但是当时出错了 提示该标识符未被定义 一时无解 后来又有一个朋友 问我怎么将一个字符串中的字符以一种动态的方式进行输出 我当时告诉他的是使用 sleep 函数 也没有细想 后来发现 根
  • 反汇编 之thiscall约定

    thiscall是C 中的非静态类成员函数的默认调用约定 对象的每个函数隐含接收this参数 采用thiscall约定时 函数的参数按照从右到左的顺序入栈 被调用的函数在返回前清理传送参数的栈 include
  • jetson orin+livox mid-70+imu+云台相机联合标定和数据采集

    将之前无人机上的x86多源数据采集和联合标定算法重建在新板子jetson orin上 解决之前多传感器采集数据时间戳没对齐的问题 1 准备工作 安装ros环境 推荐小鱼 http fishros com fish home 大佬的包避免了自
  • 王昊奋:大规模知识图谱技术

    主讲嘉宾 王昊奋 主持人 阮彤 承办 中关村大数据产业联盟 嘉宾简介 王昊奋 华东理工大学讲师 上海交通大学计算机应用专业博士 对语义搜索 图数据库以及Web挖掘与信息抽取有浓厚的兴趣 在博士就读期间发表了30余篇国际顶级会议和期刊论文 长
  • TCP&UDP测试工具的使用

    一 TCP服务测试 1 在电脑上打开测试工具 2 该测试工具分为客户端和服务器两类 首先创建一个服务端 3 默认端口号点击确定 4 点击启动服务器 此时我们可以通过外部客户端与该服务器相连 5 在此 我们重新打开一次软件 模拟客户端并与服务
  • pandas基础入门之数据修改与基本运算

    1 数据复制 直接赋值 直接赋值的话 只是复制的元数据 行列索引 但是元素还是存储在相同内存位置 对元素进行修改会影响另外一个 import pandas as pd import numpy as np df pd DataFrame n