【问题标题】:Drop row in Pandas dataframe if matching multiple values如果匹配多个值,则在 Pandas 数据框中删除行
【发布时间】:2020-08-08 22:54:18
【问题描述】:

我正在将 .csv 读入数据框并将其成功推送到 SQL 数据库。不幸的是,在将 csv 发送到 SQL 数据库之前,我想删除几行。我尝试过的几种解决方案都没有奏效,我被卡住了。

示例 .csv

Name,Organization,Lifecycle Environment,Subscription Quantity,Subscription SKU
Host1,MyORG,Library,500,NRS2718
Host1,MyOrg,Library,-1,155425976806
Host2,MyOrg,DEV,250,NRS2718
Host2,MyOrg,DEV,-1,361867226799

我需要删除包含值 155425976806 和 361867226799 的数据帧的行

Name,Organization,Lifecycle Environment,Subscription Quantity,Subscription SKU
Host1,MyORG,Library,500,NRS2718
Host2,MyOrg,DEV,250,NRS2718

我的代码不会掉一行

from sqlalchemy import create_engine
import urllib
import pyodbc
import pandas as pd

df = pd.read_csv("./data.csv")

quoted = urllib.parse.quote_plus("Driver={ODBC Driver 17 for SQL Server};SERVER=10.1.1.11;uid=myuser;pwd=mypass;DATABASE=LICENSES")
engine = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted))

indexSKU = df[ (df['Subscription SKU'] == 155425976806) & (df['Subscription SKU'] == 361867226799)].index
df.drop(indexSKU , inplace=True)

df.to_sql('DataTable', if_exists = 'replace', schema='dbo', con=engine)

result = engine.execute('SELECT COUNT(*) FROM [dbo].[DataTable]')
result.fetchall()

【问题讨论】:

    标签: python sql-server pandas dataframe


    【解决方案1】:
    • 数字是str 类型,因此您需要将它们作为字符串进行搜索。
      • 使用map(str, [...]) 将不需要的数字列表中的所有数值转换为str 类型。
    • Boolean search.isin 一起使用,并与~ 取反,因为您需要没有这些值的行。
    # read the data in
    df = pd.read_csv("./data.csv")
    
    # use a Boolean mask to exclude the values
    df = df[~df['Subscription SKU'].isin(map(str, [155425976806, 361867226799]))]
    
    # display(df)
        Name Organization Lifecycle Environment  Subscription Quantity Subscription SKU
    0  Host1        MyORG               Library                    500          NRS2718
    2  Host2        MyOrg                   DEV                    250          NRS2718
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-16
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      相关资源
      最近更新 更多