声明: 本文由DataScience 原创发表, 转载请注明本文链接 mlln.cn, 并在文后留言转载
.
本文代码运行环境:
windows10
python3.6
jupyter notebook
我使用pandas有很长时间了, 一个经常被问道的问题是, 如何增加或删除行, 今天我在这里做一个总结, 希望能帮助一部分人. 下面我们先引入用到的库, 并进行一些初始化的操作.
1 2 import pandas as pdimport random
1 2 3 4 df = pd.DataFrame({'a' :list (range (100 )), 'b' :[random.random() for i in range (100 )]}) index = pd.MultiIndex.from_product([list ('abcd' ), list (range (25 ))]) df.index = index df.head()
输出:
a
b
a
0
0
0.579633
1
1
0.220929
2
2
0.729217
3
3
0.183624
4
4
0.088332
增加行 如果你确定知道要增加的行的索引是什么, 并且这个索引不在df.index中, 那么用如下方法是最简单的.
1 2 df.loc[('a' , -1 ), :]=None df.tail()
输出:
a
b
d
21
96.0
0.869157
22
97.0
0.443904
23
98.0
0.946893
24
99.0
0.787945
a
-1
NaN
NaN
但是, 很多时候, 我们并不确定索引是否已经存在, 只想追加数据, 那么最好是使用DataFrame.append
方法. 但是你需要事先创建一个dataframe实例, 用于存放被追加的数据.
1 2 3 data = pd.DataFrame({'a' :[1 ,2 ,3 ], 'b' :[4 ,5 ,6 ]}) data.index = pd.MultiIndex.from_tuples([('a' , 1 ), ('b' , 1 ), ('c' , 1 )]) data
输出:
a
b
a
1
1
4
b
1
2
5
c
1
3
6
1 2 new_df = df.append(data) new_df.tail()
输出:
a
b
d
24
99.0
0.787945
a
-1
NaN
NaN
1
1.0
4.000000
b
1
2.0
5.000000
c
1
3.0
6.000000
删除行 很多时候我们没必要做频繁的数据操作, 只需要建立一个DataFrame的视图即可, 比如选择a<10的所有数据:
输出:
a
b
a
0
0.0
0.579633
2
2.0
0.729217
3
3.0
0.183624
4
4.0
0.088332
5
5.0
0.757389
6
6.0
0.621999
7
7.0
0.907589
8
8.0
0.493122
9
9.0
0.884472
我们并没有删除这些行, 只是选择出了我们需要的行, 并建立了一个视图, 这个概念可以类比与mysql数据库的查询视图.
但是, 如果想要删除某些行, 那怎么办? 我常用的方法是DataFrame.drop
, 它既可以删除行, 也可以删除列. 具体看代码:
1 2 df.drop(('a' , -1 )).tail()
输出:
a
b
to_delete
d
20
95.0
0.599706
1
21
96.0
0.869157
1
22
97.0
0.443904
1
23
98.0
0.946893
1
24
99.0
0.787945
1
1 2 3 df.drop(df.index[-1 ]).tail()
输出:
a
b
d
20
95.0
0.599706
21
96.0
0.869157
22
97.0
0.443904
23
98.0
0.946893
24
99.0
0.787945
1 2 3 df.drop([('a' , -1 ), ('d' , 24 )]).tail()
输出:
a
b
to_delete
d
19
94.0
0.593349
1
20
95.0
0.599706
1
21
96.0
0.869157
1
22
97.0
0.443904
1
23
98.0
0.946893
1
1 2 3 df.drop(df.index[-5 :]).tail()
输出:
a
b
d
16
91.0
0.838718
17
92.0
0.334192
18
93.0
0.110082
19
94.0
0.593349
20
95.0
0.599706
1 2 df.drop('to_delete' , axis=1 ).head()
输出:
a
b
a
0
0.0
0.579633
1
NaN
NaN
2
2.0
0.729217
3
3.0
0.183624
4
4.0
0.088332
当然, 这些操作并没有真的删除这些数据, 想要在df
上删除, 你需要使用参数inplace=True
, 如:
1 2 df.drop('to_delete' , axis=1 , inplace=True ) df.head()
输出:
a
b
a
0
0.0
0.579633
1
NaN
NaN
2
2.0
0.729217
3
3.0
0.183624
4
4.0
0.088332
好啦, 这就是我用python pandas时删除和增加行的方法, 如果你有更好的方法, 请在这里留言.
注意 本文由jupyter notebook转换而来, 您可以在这里下载notebook 统计咨询请加QQ 2726725926, 微信 mllncn, SPSS统计咨询是收费的 微博上@mlln-cn可以向我免费题问 请记住我的网址: mlln.cn 或者 jupyter.cn