读取 CSV 并根据特定值创建仅包含指定列和子集或行的新 CSV

Read CSV and create new CSV with only specified columns and subset or rows based on specific values

我有一个包含 5 列的 CSV 文件:

Student Id, Course Id, Student Name, Course Name, GPA
12,112 , John,Math, 3.7
11,111 , Mohammed,Astronomy, 3.89
10,100 , Peter,Java Programming, 3.5
9,99 , Lisa,Cooking, 4.0

使用 Python 3.8 我需要读取该文件并创建一个新的 CSV 文件,其中包含更少的列,消除所有前导和尾随空格:

(学生姓名、课程名称和 GPA),

但仅在名称字段包含特定值的情况下(例如:'John'、'Lisa')

如果没有相应名称的记录,则不要创建输出文件并打印消息 (例如:'No Student name(s) found in the database')

我正在使用以下代码创建包含所需列的新 CSV 文件,但我不确定如何 select 我的新(输出)CSV 文件的记录子集。

import csv

with open('My_Source_file.csv') as infile, open('My_Ouput_file.csv', 'w', newline='') as outfile:
    csv.writer(outfile).writerows((row[3], row[4], row[5]) for row in csv.reader(infile))

试试这个:

import pandas as pd

dta = pd.read_csv('test.csv')
# removing the white space from column names:
dta.columns = dta.columns.str.strip() 

# removing the tailing white space from all records in all columns:

for col in dta.columns:
    # checking if column is string:
    if dta[col].dtype == object:
        dta[col] = dta[col].str.strip()

selection_list = ['John', 'Lisa']
dta = dta[dta['Student Name'].isin(selection_list)]
    
if len(dta) != 0:
    # pass your selected column as a list like this:
    selected_columns = ["Student Id","Course Id","Student Name"]
    dta[selected_columns].to_csv('My_Ouput_file.csv', index=False)

else:
    print('No Student name(s) found in the database')

输出:

   Student Id Course Id   Student Name 
0  12         112         John         
3  9          99          Lisa         

此脚本获取 selection_list 中的名称(或您感兴趣的变量)并选择所选列 (Student Name) 中包含这些名称的行。