如何格式化Pandas DataFrame输出?筛选无end_date员工行并按CSV格式打印
员工CSV在职记录筛选与格式化输出方案
问题需求
开发员工追踪程序,使用CSV存储员工信息,需筛选无end_date(仍在职)的员工行并按原CSV格式打印,且不能使用df.drop方法以保留所有员工记录。当前代码打印为竖排格式,不符合要求。
CSV示例数据
employee_id,name,address,Phone,date_of_birth,job_title,start_date,end_date 1,Arya,New York,1234567890,1/1/1970,lecturer,1/1/2021,10/20/2022 2,Terri,New York,25151521,010109,Nurse,10/10/2022, 42,Bill,New York,2314,09/10/1994,Teacher,10/14/2022, 48,Steve,New York,454554,08/10/1994,Teacher,02/25/2022, 9,Stephen,New York,526415252,10/08/1994,Teacher,10/15/2022,N/A
当前代码及问题
df2 = pd.read_csv('employees.csv') print() for index, row in df2.iterrows(): if ((len(str(row['end_date'])) <= 3)): print(df2.loc[index]) else: continue print()
当前输出为竖排的Series格式,不符合CSV行式要求:
employee_id 8 name Bill address New York phone 25235 date_of_birth 081019 job_title Engineer start_date 081019 end_date NaN Name: 2, dtype: object
解决方案
方法1:使用布尔索引筛选后转CSV格式输出
直接利用pandas的to_csv方法生成符合要求的格式,无需手动循环拼接:
import pandas as pd df2 = pd.read_csv('employees.csv') # 筛选符合条件的在职员工行 active_mask = df2['end_date'].apply(lambda x: len(str(x)) <= 3) active_employees = df2[active_mask] # 按CSV格式打印,不输出索引,空值替换为空字符串,禁用引号 print(active_employees.to_csv(index=False, header=True, quoting=0, na_rep=''))
方法2:循环拼接每行数据为CSV字符串
如果需要更灵活的控制,可手动遍历筛选后的行并拼接成CSV格式:
import pandas as pd df2 = pd.read_csv('employees.csv') # 先打印表头 print(','.join(df2.columns)) for _, row in df2.iterrows(): if len(str(row['end_date'])) <= 3: # 将每行数据转为CSV格式字符串,空值替换为空 csv_row = ','.join(str(cell) if pd.notna(cell) else '' for cell in row) print(csv_row)
效果说明
两种方法均可输出符合要求的格式:
employee_id,name,address,Phone,date_of_birth,job_title,start_date,end_date 2,Terri,New York,25151521,010109,Nurse,10/10/2022, 42,Bill,New York,2314,09/10/1994,Teacher,10/14/2022, 48,Steve,New York,454554,08/10/1994,Teacher,02/25/2022,
内容的提问来源于stack exchange,提问作者Parker Johnson
相关产品推荐
相关产品推荐

