【发布时间】:2013-04-30 02:23:33
【问题描述】:
我需要删除 pandas 中数据框的前三行。
我知道df.ix[:-1] 会删除最后一行,但我不知道如何删除前 n 行。
【问题讨论】:
-
对于 read_csv/read_html 你可以使用例如
header=3构造函数参数,它将将该行设置为标题行:stackoverflow.com/a/51822697/191246
我需要删除 pandas 中数据框的前三行。
我知道df.ix[:-1] 会删除最后一行,但我不知道如何删除前 n 行。
【问题讨论】:
header=3 构造函数参数,它将将该行设置为标题行:stackoverflow.com/a/51822697/191246
【讨论】:
groupby() 中执行此操作吗?这有效,但返回索引中的重复列 df=pd.DataFrame({'v':np.arange(10).tolist()*2,'g':['a']*10+['b']*10});df.groupby('g').apply(lambda x: x.iloc[3:])
df=df.iloc[3:9]?
pd.concat() 结合使用。比如df2 = pd.concat([df.iloc[:3],df.iloc[10:]])。
您可以使用 python 切片,但请注意它不是就地的。
In [15]: import pandas as pd
In [16]: import numpy as np
In [17]: df = pd.DataFrame(np.random.random((5,2)))
In [18]: df
Out[18]:
0 1
0 0.294077 0.229471
1 0.949007 0.790340
2 0.039961 0.720277
3 0.401468 0.803777
4 0.539951 0.763267
In [19]: df[3:]
Out[19]:
0 1
3 0.401468 0.803777
4 0.539951 0.763267
【讨论】:
pandas 中没有就地意味着什么?
inplace 参数。
我认为更明确的方法是使用 drop。
语法是:
df.drop(label)
正如@tim 和@ChaimG 所指出的,这可以就地完成:
df.drop(label, inplace=True)
一种实现方式可能是:
df.drop(df.index[:3], inplace=True)
还有另一个“就地”使用:
df.drop(df.head(3).index, inplace=True)
【讨论】:
drop 甚至可以就地计算(无需额外分配)。更快更简单!
df.drop(label, inplace=True)
inplace 操作并不快。另外,更简单是见仁见智的问题:当代码没有inplace 参数时,我发现它更容易阅读。
df = df.iloc[n:]
n 删除前 n 行。
【讨论】:
df.drop(df.index[[0,2]])
Pandas 使用从零开始的编号,因此 0 是第一行,1 是第二行,2 是第三行。
【讨论】:
一个简单的方法是使用tail(-n)来删除前n行
df=df.tail(-3)
【讨论】:
inp0= pd.read_csv("bank_marketing_updated_v1.csv",skiprows=2)
或者如果你想在现有的数据框中做
只需执行以下命令
【讨论】:
有一种简单的方法可以通过drop 命令来实现。
df = df.drop(3)
【讨论】: