Python 如果dataframe.tail(1)是X,请执行一些操作
我试图检查pandas数据框列中的最后一个单元格是否包含1或2(这是唯一的选项)。如果是1,我想删除整行,如果是2,我想保留它Python 如果dataframe.tail(1)是X,请执行一些操作,python,pandas,Python,Pandas,我试图检查pandas数据框列中的最后一个单元格是否包含1或2(这是唯一的选项)。如果是1,我想删除整行,如果是2,我想保留它 import pandas as pd df1 = pd.DataFrame({'number':[1,2,1,2,1], 'name': ['bill','mary','john','sarah','tom']}) df2 = pd.DataFrame({'number':[1,2,1,2,1,2], 'name': ['bill','mary','john','s
import pandas as pd
df1 = pd.DataFrame({'number':[1,2,1,2,1], 'name': ['bill','mary','john','sarah','tom']})
df2 = pd.DataFrame({'number':[1,2,1,2,1,2], 'name': ['bill','mary','john','sarah','tom','sam']})
在上面的示例中,我希望删除df1的最后一行(因此最后一行是“sarah”),但是在df2中,我希望保持它的原样
到目前为止,我想尝试以下方法,但我得到了一个错误
if df1['number'].tail(1) == 1:
df = df.drop(-1)
您可以使用相同的tail函数
df.drop(df.tail(n).index,inplace=True) # drop last n rows
您可以检查最后一行中的
number
值是否等于一:
check = df1['number'].tail(1).values == 1
# Or check entire row with
# check = 1 in df1.tail(1).values
如果该条件成立,则可以选择除最后一行之外的所有行,并将其分配回df1
:
if check:
df1 = df1.iloc[:-1, :]
DataFrame.drop
根据标签(索引的实际值)删除行。虽然可以使用df1.drop(df1.index[-1])
但重复的索引会带来问题。最后一行可以使用iloc
选择,也可以使用.iat
选择单个值
if df1['number'].iat[-1] == 1:
df1 = df1.iloc[:-1, :]
df1.drop(-1)
?那会是什么错误?我得到的错误是:“序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。@DC_Liv这是因为tail
返回一个序列,因此“Series==1”返回一个布尔序列。虽然它保证只有一个元素,pd.Series(True)
不是一个简单的True
或False
,这是唯一可以用来计算if
子句的东西。df1.tail(1)。值将根据使用的df['number']所有列进行检查。iat[-1]
。根据我的经验,访问列的速度非常快,因此使用chained\uuu getitem\uuu
不会有问题。回答得好。
if df1['number'].iat[-1] == 1:
df1 = df1.iloc[:-1, :]