Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果dataframe.tail(1)是X,请执行一些操作_Python_Pandas - Fatal编程技术网

Python 如果dataframe.tail(1)是X,请执行一些操作

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

我试图检查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','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, :]