推荐书: Python开发最佳实践

pandas-Dataframe增加行删除行

分享时@该用户已经被封, 我就能回答你的问题奥!

文章目录
  1. 1. 增加行
  2. 2. 删除行


声明: 本文由DataScience原创发表, 转载请注明本文链接mlln.cn, 并在文后留言转载.

本文代码运行环境:

  • windows10
  • python3.6
  • jupyter notebook

我使用pandas有很长时间了, 一个经常被问道的问题是, 如何增加或删除行, 今天我在这里做一个总结, 希望能帮助一部分人. 下面我们先引入用到的库, 并进行一些初始化的操作.

1
2
import pandas as pd
import 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的所有数据:

1
df[df['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
# 删除index为('a', -1)的行
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
# 删除连续的多行
# 删除最后5行
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
有问题可以直接在下方留言
或者给我发邮件675495787[at]qq.com
请记住我的网址: mlln.cn 或者 jupyter.cn