- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章pandas删除行删除列增加行增加列的实现由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
创建df:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>>> df
=
pd.DataFrame(np.arange(
16
).reshape(
4
,
4
), columns
=
list
(
'ABCD'
), index
=
list
(
'1234'
))
>>> df
A B C D
1
0
1
2
3
2
4
5
6
7
3
8
9
10
11
4
12
13
14
15
|
1,删除行 。
1.1,drop 。
通过行名称删除:
1
2
3
|
df
=
df.drop([
'1'
,
'2'
])
# 不指定axis默认为0
df.drop([
'1'
,
'3'
], inplace
=
True
)
|
通过行号删除:
1
2
3
|
df.drop(df.index[
0
], inplace
=
True
)
# 删除第1行
df.drop(df.index[
0
:
3
], inplace
=
True
)
# 删除前3行
df.drop(df.index[[
0
,
2
]], inplace
=
True
)
# 删除第1第3行
|
1.2,通过各种筛选方法实现删除行 。
详见pandas“选择行单元格,选择行列“的笔记 。
举例,通过筛选可以实现很多功能,例如要对某行数据去重,可以获取去重后的index列表后,使用loc方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
>>> df.loc[
'2'
,
'B'
]
=
9
>>> df
A B C D
1
0
1
2
3
2
4
9
6
7
3
8
9
10
11
4
12
13
14
15
>>> chooses
=
df[
'B'
].drop_duplicates().index
>>> df.loc[chooses]
A B C D
1
0
1
2
3
2
4
9
6
7
4
12
13
14
15
|
2,删除列 。
2.1,del 。
1
|
del
df[
'A'
]
# 删除A列,会就地修改
|
2.2,drop 。
通过列名称删除:
1
2
3
|
df
=
df.drop([
'B'
,
'C'
], axis
=
1
)
# drop不会就地修改,创建副本返回
df.drop([
'B'
,
'C'
], axis
=
1
, inplace
=
True
)
# inplace=True会就地修改
|
使用列数删除,传入参数是int,列表,者切片: 。
1
2
3
4
5
|
df.drop(df.columns[
0
], axis
=
1
, inplace
=
True
)
# 删除第1列
df.drop(df.columns[
0
:
3
], axis
=
1
, inplace
=
True
)
# 删除前3列
df.drop(df.columns[[
0
,
2
]], axis
=
1
, inplace
=
True
)
# 删除第1第3列
|
2.3,通过各种筛选方法实现删除列 。
详见pandas“选择行单元格,选择行列“的笔记 。
3,增加行 。
3.1,loc,at,set_value 。
想增加一行,行名称为‘5',内容为[16, 17, 18, 19] 。
1
2
3
4
5
|
df.loc[
'5'
]
=
[
16
,
17
,
18
,
19
]
# 后面的序列是Iterable就行
df.at[
'5'
]
=
[
16
,
17
,
18
,
19
]
df.set_value(
'5'
, df.columns, [
16
,
17
,
18
,
19
], takeable
=
False
)
# warning,set_value会被取消
|
3.2,append 。
添加有name的Series:
1
2
3
|
s
=
pd.Series([
16
,
17
,
18
,
19
], index
=
df.columns, name
=
'5'
)
df
=
df.append(s)
|
添加没有name的Series,必须ignore_index:
1
2
3
|
s
=
pd.Series([
16
,
17
,
18
,
19
], index
=
df.columns)
df
=
df.append(s, ignore_index
=
True
)
|
可以 append字典列表,同样需要必须ignore_index:
1
2
3
|
ls
=
[{
'A'
:
16
,
'B'
:
17
,
'C'
:
18
,
'D'
:
19
}, {
'A'
:
20
,
'B'
:
21
,
'C'
:
22
,
'D'
:
23
}]
df
=
df.append(ls, ignore_index
=
True
)
|
3.3,逐行增加 。
简单的逐行添加内容,可以:
1
|
df.loc[
len
(df)]
=
[
16
,
17
,
18
,
19
]
|
但需要注意:len(df)生成的是int,如果生成的int,df已经存在了,会覆盖该行数据,而不会新增 。
3.4,插入行 。
增加行没找到类似insert这种可以插入的方法,暂时替代方法可以先reindex,再赋值: 。
1
2
3
|
df
=
df.reindex(index
=
df.index.insert(
2
,
'5'
))
df.loc[
'5'
]
=
[
16
,
17
,
18
,
19
]
|
4,df增加列 。
一般涉及到增加列项时,经常会对现有的数据进行遍历运算,获得新增列项的值,所以这里结合对DataFrame的遍历讨论增加列.
例如,想增加一列'E',值等于'A'和'C'列对应值之和.
4.1,遍历DataFrame获取序列的方法 。
1
2
3
4
5
6
7
8
9
|
s
=
[a
+
c
for
a, c
in
zip
(df[
'A'
], df[
'C'
])]
# 通过遍历获取序列
s
=
[row[
'A'
]
+
row[
'C'
]
for
i, row
in
df.iterrows()]
# 通过iterrows()获取序列,s为list
s
=
df.
apply
(
lambda
row: row[
'A'
]
+
row[
'C'
], axis
=
1
)
# 通过apply获取序列,s为Series
s
=
df[
'A'
]
+
df[
'C'
]
# 通过Series矢量相加获取序列
s
=
df[
'A'
].values
+
df[
'C'
].values
# 通过Numpy矢量相加获取序列
|
4.2,[ ],loc 。
通过df[]或者df.loc添加序列 。
1
2
3
|
df.loc[:,
'E'
]
=
s
df[
'E'
]
=
s
|
4.3,Insert 。
可以指定插入位置,和插入列名称 。
1
|
df.insert(
0
,
'E'
, s)
|
4.4,concat 。
1
2
|
s
=
pd.Series([
16
,
17
,
18
,
19
], name
=
'E'
, index
=
df.index)
df
=
pd.concat([df, s], axis
=
1
)
|
4.5,iloc和loc遍历过程中给列赋值 。
效率比较低 。
df['E']是DataFrame的一个Series,是引用,对其修改也能改变DataFrame,但运行时报了Warning 。
1
2
3
4
5
6
7
|
df[
'E'
]
=
None
# 需事先创建e列,否则iloc遍历会报错,loc遍历无需事先创建
for
i
in
range
(
len
(df)):
df[
'E'
].iloc[i]
=
df[
'A'
].iloc[i]
+
df[
'C'
].iloc[i]
# SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
|
不用Series不会报Warning:
1
2
3
4
5
6
7
|
df[
'E'
]
=
None
col_no
=
[i
for
i
in
df.columns].index(
'E'
)
for
i
in
range
(
len
(df)):
df.iloc[i, col_no]
=
df[
'A'
].iloc[i]
+
df[
'C'
].iloc[i]
|
用loc无需先给E列赋空值:
1
2
3
|
for
i
in
df.index:
df.loc[i,
'E'
]
=
df.loc[i,
'A'
]
+
df.loc[i,
'C'
]
|
4.6,逐列增加 。
简单的逐列添加内容,可以:
1
|
df[
len
(df)]
=
[
16
,
17
,
18
,
19
]
|
但需要注意:len(df)生成的是int,如果生成的int,df已经存在了,会覆盖该列数据,而不会新增 。
4.7,其他方法 。
增加3列,EFG,value默认为np.NaN 。
1
2
3
|
df
=
pd.concat([df, pd.DataFrame(columns
=
list
(
'EFG'
))])
# 列的次序无法指定,并且fillna时会对整个df做出调整
df
=
df.reindex(columns
=
list
(
'ABCDEFG'
), fill_value
=
0
)
# 列的次序按照list指定,并且fill_value只对新增列做出调整,推荐!
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://www.cnblogs.com/guxh/p/9420610.html 。
最后此篇关于pandas删除行删除列增加行增加列的实现的文章就讲到这里了,如果你想了解更多关于pandas删除行删除列增加行增加列的实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
pandas.crosstab 和 Pandas 数据透视表似乎都提供了完全相同的功能。有什么不同吗? 最佳答案 pivot_table没有 normalize争论,不幸的是。 在 crosstab
我能找到的最接近的答案似乎太复杂:How I can create an interval column in pandas? 如果我有一个如下所示的 pandas 数据框: +-------+ |
这是我用来将某一行的一列值移动到同一行的另一列的当前代码: #Move 2014/15 column ValB to column ValA df.loc[(df.Survey_year == 201
我有一个以下格式的 Pandas 数据框: df = pd.DataFrame({'a' : [0,1,2,3,4,5,6], 'b' : [-0.5, 0.0, 1.0, 1.2, 1.4,
所以我有这两个数据框,我想得到一个新的数据框,它由两个数据框的行的克罗内克积组成。正确的做法是什么? 举个例子:数据框1 c1 c2 0 10 100 1 11 110 2 12
TL;DR:在 pandas 中,如何绘制条形图以使其 x 轴刻度标签看起来像折线图? 我制作了一个间隔均匀的时间序列(每天一个项目),并且可以像这样很好地绘制它: intensity[350:450
我有以下两个时间列,“Time1”和“Time2”。我必须计算 Pandas 中的“差异”列,即 (Time2-Time1): Time1 Time2
从这个 df 去的正确方法是什么: >>> df=pd.DataFrame({'a':['jeff','bob','jill'], 'b':['bob','jeff','mike']}) >>> df
我想按周从 Pandas 框架中的列中累积计算唯一值。例如,假设我有这样的数据: df = pd.DataFrame({'user_id':[1,1,1,2,2,2],'week':[1,1,2,1,
数据透视表的表示形式看起来不像我在寻找的东西,更具体地说,结果行的顺序。 我不知道如何以正确的方式进行更改。 df示例: test_df = pd.DataFrame({'name':['name_1
我有一个数据框,如下所示。 Category Actual Predicted 1 1 1 1 0
我有一个 df,如下所示。 df: ID open_date limit 1 2020-06-03 100 1 2020-06-23 500
我有一个 df ,其中包含与唯一值关联的各种字符串。对于这些唯一值,我想删除不等于单独列表的行,最后一行除外。 下面使用 Label 中的各种字符串值与 Item 相关联.所以对于每个唯一的 Item
考虑以下具有相同名称的列的数据框(显然,这确实发生了,目前我有一个像这样的数据集!:() >>> df = pd.DataFrame({"a":range(10,15),"b":range(5,10)
我在 Pandas 中有一个 DF,它看起来像: Letters Numbers A 1 A 3 A 2 A 1 B 1 B 2
如何减去两列之间的时间并将其转换为分钟 Date Time Ordered Time Delivered 0 1/11/19 9:25:00 am 10:58:00 am
我试图理解 pandas 中的下/上百分位数计算,但有点困惑。这是它的示例代码和输出。 test = pd.Series([7, 15, 36, 39, 40, 41]) test.describe(
我有一个多索引数据框,如下所示: TQ bought HT Detailed Instru
我需要从包含值“低”,“中”或“高”的数据框列创建直方图。当我尝试执行通常的df.column.hist()时,出现以下错误。 ex3.Severity.value_counts() Out[85]:
我试图根据另一列的长度对一列进行子串,但结果集是 NaN .我究竟做错了什么? import pandas as pd df = pd.DataFrame([['abcdefghi','xyz'],
我是一名优秀的程序员,十分优秀!