- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Pandas 数据框增、删、改、查、去重、抽样基本操作方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
总括 。
pandas的索引函数主要有三种:
loc 标签索引,行和列的名称 。
iloc 整型索引(绝对位置索引),绝对意义上的几行几列,起始索引为0 。
ix 是 iloc 和 loc的合体 。
at是loc的快捷方式 。
iat是iloc的快捷方式 。
建立测试数据集:
1
2
3
4
5
6
7
|
import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3], 'b': ['a', 'b', 'c'],'c': ["A","B","C"]})
print(df)
a b c
0 1 a A
1 2 b B
2 3 c C
|
行操作 。
选择某一行 。
1
2
3
4
5
|
print(df.loc[1,:])
a 2
b b
c B
Name: 1, dtype: object
|
选择多行 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
print(df.loc[1:2,:])#选择1:2行,slice为1
a b c
1 2 b B
2 3 c C
print(df.loc[::-1,:])#选择所有行,slice为-1,所以为倒序
a b c
2 3 c C
1 2 b B
0 1 a A
print(df.loc[0:2:2,:])#选择0至2行,slice为2,等同于print(df.loc[0:2:2,:])因为只有3行
a b c
0 1 a A
2 3 c C
|
条件筛选 。
普通条件筛选 。
1
2
3
4
5
6
7
8
|
print(df.loc[:,"a"]>2)#原理是首先做了一个判断,然后再筛选
0 False
1 False
2 True
Name: a, dtype: bool
print(df.loc[df.loc[:,"a"]>2,:])
a b c
2 3 c C
|
另外条件筛选还可以集逻辑运算符 | for or, & for and, and ~for not 。
1
2
3
4
5
6
7
8
9
|
In [129]: s = pd.Series(range(-3, 4))
In [132]: s[(s < -1) | (s > 0.5)]
Out[132]:
0 -3
1 -2
4 1
5 2
6 3
dtype: int64
|
isin 。
非索引列使用isin 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
In [141]: s = pd.Series(np.arange(5), index=np.arange(5)[::-1], dtype='int64')
In [143]: s.isin([2, 4, 6])
Out[143]:
4 False
3 False
2 True
1 False
0 True
dtype: bool
In [144]: s[s.isin([2, 4, 6])]
Out[144]:
2 2
0 4
dtype: int64
|
索引列使用isin 。
1
2
3
4
5
6
7
8
9
10
11
12
|
In [145]: s[s.index.isin([2, 4, 6])]
Out[145]:
4 0
2 2
dtype: int64
# compare it to the following
In [146]: s[[2, 4, 6]]
Out[146]:
2 2.0
4 0.0
6 NaN
dtype: float64
|
结合any()/all()在多列索引时 。
1
2
3
4
5
6
7
8
9
|
In [151]: df = pd.DataFrame({'vals': [1, 2, 3, 4], 'ids': ['a', 'b', 'f', 'n'],
.....: 'ids2': ['a', 'n', 'c', 'n']})
.....:
In [156]: values = {'ids': ['a', 'b'], 'ids2': ['a', 'c'], 'vals': [1, 3]}
In [157]: row_mask = df.isin(values).all(1)
In [158]: df[row_mask]
Out[158]:
ids ids2 vals
0 a a 1
|
where() 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
In [1]: dates = pd.date_range('1/1/2000', periods=8)
In [2]: df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D'])
In [3]: df
Out[3]:
A B C D
2000-01-01 0.469112 -0.282863 -1.509059 -1.135632
2000-01-02 1.212112 -0.173215 0.119209 -1.044236
2000-01-03 -0.861849 -2.104569 -0.494929 1.071804
2000-01-04 0.721555 -0.706771 -1.039575 0.271860
2000-01-05 -0.424972 0.567020 0.276232 -1.087401
2000-01-06 -0.673690 0.113648 -1.478427 0.524988
2000-01-07 0.404705 0.577046 -1.715002 -1.039268
2000-01-08 -0.370647 -1.157892 -1.344312 0.844885
In [162]: df.where(df < 0, -df)
Out[162]:
A B C D
2000-01-01 -2.104139 -1.309525 -0.485855 -0.245166
2000-01-02 -0.352480 -0.390389 -1.192319 -1.655824
2000-01-03 -0.864883 -0.299674 -0.227870 -0.281059
2000-01-04 -0.846958 -1.222082 -0.600705 -1.233203
2000-01-05 -0.669692 -0.605656 -1.169184 -0.342416
2000-01-06 -0.868584 -0.948458 -2.297780 -0.684718
2000-01-07 -2.670153 -0.114722 -0.168904 -0.048048
2000-01-08 -0.801196 -1.392071 -0.048788 -0.808838
|
DataFrame.where() differs from numpy.where()的区别 。
1
|
In [172]: df.where(df < 0, -df) == np.where(df < 0, df, -df)
|
当series对象使用where()时,则返回一个序列 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
In [141]: s = pd.Series(np.arange(5), index=np.arange(5)[::-1], dtype='int64')
In [159]: s[s > 0]
Out[159]:
3 1
2 2
1 3
0 4
dtype: int64
In [160]: s.where(s > 0)
Out[160]:
4 NaN
3 1.0
2 2.0
1 3.0
0 4.0
dtype: float64
|
抽样筛选 。
1
|
DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
|
当在有权重筛选时,未赋值的列权重为0,如果权重和不为1,则将会将每个权重除以总和。random_state可以设置抽样的种子(seed)。axis可是设置列随机抽样.
1
2
3
4
5
6
7
|
In [105]: df2 = pd.DataFrame({'col1':[9,8,7,6], 'weight_column':[0.5, 0.4, 0.1, 0]})
In [106]: df2.sample(n = 3, weights = 'weight_column')
Out[106]:
col1 weight_column
1 8 0.4
0 9 0.5
2 7 0.1
|
增加行 。
1
2
3
4
5
6
|
df.loc[3,:]=4
a b c
0 1.0 a A
1 2.0 b B
2 3.0 c C
3 4.0 4 4
|
插入行 。
pandas里并没有直接指定索引的插入行的方法,所以要自己设置 。
1
2
3
4
5
6
7
8
|
line = pd.DataFrame({df.columns[0]:"--",df.columns[1]:"--",df.columns[2]:"--"},index=[1])
df = pd.concat([df.loc[:0],line,df.loc[1:]]).reset_index(drop=True)#df.loc[:0]这里不能写成df.loc[0],因为df.loc[0]返回的是series
a b c
0 1.0 a A
1 -- -- --
2 2.0 b B
3 3.0 c C
4 4.0 4 4
|
交换行 。
1
2
3
4
5
|
df.loc[[1,2],:]=df.loc[[2,1],:].values
a b c
0 1 a A
1 3 c C
2 2 b B
|
删除行 。
1
2
3
4
5
|
df.drop(0,axis=0,inplace=True)
print(df)
a b c
1 2 b B
2 3 c C
|
注意 。
在以时间作为索引的数据框中,索引是以整形的方式来的.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
In [39]: dfl = pd.DataFrame(np.random.randn(5,4), columns=list('ABCD'), index=pd.date_range('20130101',periods=5))
In [40]: dfl
Out[40]:
A B C D
2013-01-01 1.075770 -0.109050 1.643563 -1.469388
2013-01-02 0.357021 -0.674600 -1.776904 -0.968914
2013-01-03 -1.294524 0.413738 0.276662 -0.472035
2013-01-04 -0.013960 -0.362543 -0.006154 -0.923061
2013-01-05 0.895717 0.805244 -1.206412 2.565646
In [41]: dfl.loc['20130102':'20130104']
Out[41]:
A B C D
2013-01-02 0.357021 -0.674600 -1.776904 -0.968914
2013-01-03 -1.294524 0.413738 0.276662 -0.472035
2013-01-04 -0.013960 -0.362543 -0.006154 -0.923061
|
列操作 。
选择某一列 。
1
2
3
4
5
|
print(df.loc[:,"a"])
0 1
1 2
2 3
Name: a, dtype: int64
|
选择多列 。
1
2
3
4
5
|
print(df.loc[:,"a":"b"])
a b
0 1 a
1 2 b
2 3 c
|
增加列,如果对已有的列,则是赋值 。
1
2
3
4
5
|
df.loc[:,"d"]=4
a b c d
0 1 a A 4
1 2 b B 4
2 3 c C 4
|
交换两列的值 。
1
2
3
4
5
6
|
df.loc[:,['b', 'a']] = df.loc[:,['a', 'b']].values
print(df)
a b c
0 a 1 A
1 b 2 B
2 c 3 C
|
删除列 。
1)直接del DF[‘column-name'] 。
2)采用drop方法,有下面三种等价的表达式:
DF= DF.drop(‘column_name', 1); 。
DF.drop(‘column_name',axis=1, inplace=True) 。
DF.drop([DF.columns[[0,1,]]], axis=1,inplace=True) 。
1
2
3
4
5
6
|
df.drop("a",axis=1,inplace=True)
print(df)
b c
0 a A
1 b B
2 c C
|
还有一些其他的功能:
切片df.loc[::,::] 。
选择随机抽样df.sample() 。
去重.duplicated() 。
查询.lookup 。
以上这篇Pandas 数据框增、删、改、查、去重、抽样基本操作方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/claroja/article/details/65661826 。
最后此篇关于Pandas 数据框增、删、改、查、去重、抽样基本操作方法的文章就讲到这里了,如果你想了解更多关于Pandas 数据框增、删、改、查、去重、抽样基本操作方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
初学者 android 问题。好的,我已经成功写入文件。例如。 //获取文件名 String filename = getResources().getString(R.string.filename
我已经将相同的图像保存到/data/data/mypackage/img/中,现在我想显示这个全屏,我曾尝试使用 ACTION_VIEW 来显示 android 标准程序,但它不是从/data/dat
我正在使用Xcode 9,Swift 4。 我正在尝试使用以下代码从URL在ImageView中显示图像: func getImageFromUrl(sourceUrl: String) -> UII
我的 Ubuntu 安装 genymotion 有问题。主要是我无法调试我的数据库,因为通过 eclipse 中的 DBMS 和 shell 中的 adb 我无法查看/data/文件夹的内容。没有显示
我正在尝试用 PHP 发布一些 JSON 数据。但是出了点问题。 这是我的 html -- {% for x in sets %}
我观察到两种方法的结果不同。为什么是这样?我知道 lm 上发生了什么,但无法弄清楚 tslm 上发生了什么。 > library(forecast) > set.seed(2) > tts lm(t
我不确定为什么会这样!我有一个由 spring data elasticsearch 和 spring data jpa 使用的类,但是当我尝试运行我的应用程序时出现错误。 Error creatin
在 this vega 图表,如果我下载并转换 flare-dependencies.json使用以下 jq 到 csv命令, jq -r '(map(keys) | add | unique) as
我正在提交一个项目,我必须在其中创建一个带有表的 mysql 数据库。一切都在我这边进行,所以我只想检查如何将我所有的压缩文件发送给使用不同计算机的人。基本上,我如何为另一台计算机创建我的数据库文件,
我有一个应用程序可以将文本文件写入内部存储。我想仔细看看我的电脑。 我运行了 Toast.makeText 来显示路径,它说:/数据/数据/我的包 但是当我转到 Android Studio 的 An
我喜欢使用 Genymotion 模拟器以如此出色的速度加载 Android。它有非常好的速度,但仍然有一些不稳定的性能。 如何从 Eclipse 中的文件资源管理器访问 Genymotion 模拟器
我需要更改 Silverlight 中文本框的格式。数据通过 MVVM 绑定(bind)。 例如,有一个 int 属性,我将 1 添加到 setter 中的值并调用 OnPropertyChanged
我想向 Youtube Data API 提出请求,但我不需要访问任何用户信息。我只想浏览公共(public)视频并根据搜索词显示视频。 我可以在未经授权的情况下这样做吗? 最佳答案 YouTube
我已经设置了一个 Twilio 应用程序,我想向人们发送更新,但我不想回复单个文本。我只是想让他们在有问题时打电话。我一切正常,但我想在发送文本时显示传入文本,以确保我不会错过任何问题。我正在使用 p
我有一个带有表单的网站(目前它是纯 HTML,但我们正在切换到 JQuery)。流程是这样的: 接受用户的输入 --- 5 个整数 通过 REST 调用网络服务 在服务器端运行一些计算...并生成一个
假设我们有一个名为 configuration.js 的文件,当我们查看内部时,我们会看到: 'use strict'; var profile = { "project": "%Projec
这部分是对 Previous Question 的扩展我的: 我现在可以从我的 CI Controller 成功返回 JSON 数据,它返回: {"results":[{"id":"1","Sourc
有什么有效的方法可以删除 ios 中 CBL 的所有文档存储?我对此有疑问,或者,如果有人知道如何从本质上使该应用程序像刚刚安装一样,那也会非常有帮助。我们正在努力确保我们的注销实际上将应用程序设置为
我有一个 Rails 应用程序,它与其他 Rails 应用程序通信以进行数据插入。我使用 jQuery $.post 方法进行数据插入。对于插入,我的其他 Rails 应用程序显示 200 OK。但在
我正在为服务于发布请求的 API 调用运行单元测试。我正在传递请求正文,并且必须将响应作为帐户数据返回。但我只收到断言错误 注意:数据是从 Azure 中获取的 spec.js const accou
我是一名优秀的程序员,十分优秀!