使用熊猫删除值中不包含字符串的行

时间:2018-12-14 17:01:07

标签: python string pandas

我想使用python熊猫在电子表格中删除“设备”列中不包含“ CAT”的行。 这是我到目前为止的内容:

import pandas as pd
import openpyxl
import warnings
import xlrd

warnings.filterwarnings("ignore")

file_name = input("Enter File Name: ")
df = pd.read_csv(file_name)


for i in range(len(df["Equipment"])):
    if "CAT" in df["Equipment"][i]:
        print (df["Equipment"][i])
    else:
        df.drop([i])

df.to_excel("new_mp.xlsx")

该脚本会在终端中打印出正确的值,但不会删除新电子表格“ new_mp.xlsx”中的行。有人可以指出我正确的方向吗?

示例数据:

Equipment
CAT 259B3 1818 OE Skid Steer 2011 CAT
T-14 Towmaster Trailer 3124 OE Trailer 2008
CAT 938M Loader RPO RENTAL 2017 CAT 938M
Rental Water Truck 55571 Rental Water Truck international water truck

2 个答案:

答案 0 :(得分:3)

这里不需要循环;您可以使用str.contains

v = df[df["Equipment"].str.contains('CAT')]
print(v)
                                  Equipment
0     CAT 259B3 1818 OE Skid Steer 2011 CAT
2  CAT 938M Loader RPO RENTAL 2017 CAT 938M

或者,将queryengine='python'一起使用:

v = df.query('Equipment.str.contains("CAT")', engine='python')
print(v)
                                  Equipment
0     CAT 259B3 1818 OE Skid Steer 2011 CAT
2  CAT 938M Loader RPO RENTAL 2017 CAT 938M

最后,写入磁盘:

v.to_excel("new_mp.xlsx")

答案 1 :(得分:1)

您可以使用它来过滤行。

df[df['Equipment'].apply(lambda x: 'CAT' in x)].to_excel("new_mp.xlsx")

编辑:

好的,让我由内而外地解释一下:

lambda x: 'CAT' in x将x作为输入,如果x中包含“ CAT”,则返回True。

现在,df['Equipment'].apply方法将在系列的每个值上调用上面提到的lambda函数。结果将是一个布尔数组,然后将其作为布尔掩码传递给df

希望我并不过分。