根据行号删除数据框的行
Posted
技术标签:
【中文标题】根据行号删除数据框的行【英文标题】:Remove rows of a dataframe based on the row number 【发布时间】:2019-09-15 00:49:58 【问题描述】:假设我有一个数据框 (DF
) 并且我有一个这样的数组:
rm_indexes = np.array([1, 2, 3, 4, 34, 100, 154, 155, 199])
我想从DF
中删除rm_indexes
中的行号。 rm_indexes
中的一个表示第一行(DF
的第二行),三表示数据帧的第三行,依此类推(第一行为 0)。该数据帧的索引列是时间戳。
PS。我有许多相同的时间戳作为数据帧的索引。
【问题讨论】:
【参考方案1】:试试:
df.drop(df.index[rm_indexes])
示例:
import pandas as pd
df = pd.DataFrame("A":[0,1,2,3,4,5,6,7,8],
"B":[0,1,2,3,4,5,6,7,8],
"C":[0,1,2,3,4,5,6,7,8])
pos = [0,2,4]
df.drop(df.index[pos], inplace=True)
输出
A B C
1 1 1 1
3 3 3 3
5 5 5 5
6 6 6 6
7 7 7 7
8 8 8 8
编辑,在 OP 提供的进一步规范之后:具有相同索引的多行
df = pd.DataFrame("A":[0,1,2,3,4,5,6,7,8],
"B":[0,1,2,3,4,5,6,7,8],
"C":[0,1,2,3,4,5,6,7,8],,
index=["a","b","b","a","b","c","c","d","e"])
df['idx'] = df.index
pos = [1]
df.reset_index(drop=True, inplace=True)
df.drop(df.index[pos], inplace=True)
df.set_index('idx', inplace=True)
输出
A B C
idx
a 0 0 0
b 2 2 2
a 3 3 3
b 4 4 4
c 5 5 5
c 6 6 6
d 7 7 7
e 8 8 8
【讨论】:
我检查了这个。我认为这里的问题是我的时间戳与我的索引相同。因此,假设我通过您的方法删除了第 2 行。它不仅会删除第二行,还会删除所有其他类似的时间戳。【参考方案2】:您可以简单地按索引删除。这将通过索引 1、2、3、4..etc 删除 df 中的条目。199。
df.reset_index() #this will change the index from timestamp to 0,1,2...n-1
df.drop([1, 2, 3, 4, 34, 100, 154, 155, 199]) # will drop the rows
df.index = df['myTimeStamp'] # this will restore the index back to timestamp
【讨论】:
这个数据框的索引列是时间戳 哦..你改变了SO问题。索引是时间戳。让我编辑一下。df.reset_index(inplace=True)
,drop
也是如此。
我应该添加一个名为myTimeStamp
的新列吗?我认为第三行应该是df.index = df['time']
以上是关于根据行号删除数据框的行的主要内容,如果未能解决你的问题,请参考以下文章