我想使用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
答案 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
或者,将query
与engine='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
。
希望我并不过分。