csv Python -使用Pandas打印多个 Dataframe [duplicate]

uemypmqf  于 2023-05-11  发布在  Python
关注(0)|答案(1)|浏览(127)

此问题已在此处有答案

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)
6vl6ewon

6vl6ewon1#

您可以对DataFrame进行切片,以仅返回“True”行所在的位置。我认为你的代码的问题是你将fillna()应用于布尔级数,所以它不会填充任何东西。
在下面的代码中,df0存储整个重复的行,df1返回NameAge的子集(这将是NA)。

import pandas as pd

data = [['Tom', 20, 'blue'], ['Dick', 40, 'red'], ['Dick', 40, 'yellow'], ['Harry', pd.NA, 'green']]
df = pd.DataFrame(data, columns=['Name', 'Age', 'Color'])

df0 = df[df.duplicated(subset=['Name', 'Age'])]
df1 = df.loc[df['Age'].isna(), ['Name', 'Age']]

相关问题