此问题已在此处有答案:
Logical operators for Boolean indexing in Pandas(4个答案)
17小时前关闭
我正在使用.csv文件查找具有重复记录沿着缺少DOB和性别的行。
我将要处理的.csv文件没有列标题。
1.加载.csv文件(无问题。)
1.添加列标题(无问题。)
1.确定是否存在重复行(此代码没有问题。)
1.使用. isna确定是否缺少出生日期。打印SSN、姓氏、名字和出生日期。由于包含.isna(''),DOB应为空白(在此行中出现语法错误)
如果布尔值返回“TRUE”(字段为空/ null),则将数据框中列出的部分行数据打印到Excel电子表格。我包含了.fillna('')代码,以便在打印到电子表格时使DOB字段为空而不是foTRUE。每个数据框在Excel工作簿中都有自己的选项卡。最后一个代码块将单独的选项卡写入工作表工作正常。
1.确定是否缺少性别,并打印出EmpID、SSN、LastName、FirstName和Gender。(我假设上面4)中的语法错误也会发生在这一行。)
问题:检查出生日期和性别字段是否为空/空白,然后打印出特定字段的最佳方法是什么?我的代码在下面。
#导入Pandas
import pandas as pd
# Read csv file using Pandas
df = pd.read_csv('data.csv', engine='python')
# Add column headers to csv file
df.columns = ["EmpID","SSN", "Status", "LastName", "FirstName", "Middle", "DOB", "Address1", "Address2", "City", "State", "Zip", "Phone", "Email", "Gender"]
# Dataframe 0 used to obtain list of duplicate rows referencing multiple columns
df0 = df[df[["EmpID", "SSN","DOB"]].duplicated() == True
# Dataframe 1 used to obtain list of missing Dates of Birth
df1 = df["DOB"].isna().fillna('')
if df1 == True: print(df.columns = "EmpID", "SSN", "LastName", "FirstName", "DOB")
## Dataframe 2 used to obtain list of missing Genders
df2=df["Gender"].isna().fillna('')
if df2 == True: print(df.columns = "EmpID", "SSN", "LastName", "FirstName", "Gender")
## Print the above 3 dataframes as separate tabs in one Excel file
with pd.ExcelWriter('output.xlsx') as writer:
df0.to_excel(writer, sheet_name='Duplicates', index=True)
df1.to_excel(writer, sheet_name='DOB', index=True)
df2.to_excel(writer, sheet_name='Gender', index=True)
1条答案
按热度按时间6vl6ewon1#
您可以对DataFrame进行切片,以仅返回“True”行所在的位置。我认为你的代码的问题是你将
fillna()
应用于布尔级数,所以它不会填充任何东西。在下面的代码中,
df0
存储整个重复的行,df1
返回Name
和Age
的子集(这将是NA)。