有没有一种方法可以使用Python csv阅读器模块提取某些列?

时间:2019-09-18 12:12:13

标签: python csv

我可以打开和读取一个csv文件,并使用CSV模块打印选定的列。但是,我无法提取几列并将其使用CSV模块存储在LIST中

我的文件只有4列(名称,团队,大学和薪水),我只想提取2列,即NAME和SALARY,然后我从SALARY COLUMN计算所有薪水。我在寻找CSV模块解决方案,而不是熊猫。这是一个奇怪的要求。

下面是我的代码:

 $posts = NewJob::with('client_info','office_info')

          ->orderBy('won', 'desc')
          ->where('progress' , 'forwarded')
          ->Where('won', 'like', '%' . $request->session()->get('search') . '%')
          ->orWhere('proj_name', 'like', '%' . $request->session()->get('search') . '%')
          ->orWhere('client_infos.name', 'like', '%' . $request->session()->get('search') . '%')
          ->orWhere('office_infos.level', 'like', '%' . $request->session()->get('search') . '%')
          ->paginate(5);

NBA.csv

4 个答案:

答案 0 :(得分:1)

您可以这样做:

df = pd.read_csv(filename, usecols=['Name', 'Salary'])

答案 1 :(得分:1)

更新

如果我正确理解:

import csv

data = []
with open('nba.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        data.append({'name': row['Name'], 'salary': float(row['Salary'])})

print(sum(x['salary'] for x in data))

csv.reader()

导入csv

data = []
with open('test.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    for row in reader:
        data.append({'name': row[0], 'salary': row[3]})

print(sum(float(x['salary']) for x in data[1:]))

答案 2 :(得分:1)

如果您对性能有所关注,可以使用operator.itemgetter来获取所需的列。

>>> igetter = operator.itemgetter(0, 3)
>>> with open('nba.csv') as f:
...     reader = csv.reader(f)
...     next(reader)   # Skip header row
...     data = [igetter(row) for row in reader]
... 
['Name', 'Team', 'College', 'Salary']
>>> data
[('Avery Bradley', '7730377'), ('Jae Crowder', '6796117'), ('John Holland', '1749840'), ('R. J. Hunter', '1148640')]

>>> total_salary = sum(int(salary) for _, salary in data)
>>> total_salary
17424974

itemgetter也可以与DictReader一起使用:

>>> igetter = operator.itemgetter('Name', 'Salary')
>>> with open('nba.csv') as f:
...     reader = csv.DictReader(f)
...     data = [igetter(row) for row in reader]
... 
>>> data
[('Avery Bradley', '7730377'), ('Jae Crowder', '6796117'), ('John Holland', '1749840'), ('R. J. Hunter', '1148640')]

答案 3 :(得分:-1)

除非文件很小,否则不要使用Pandas。熊猫超级慢。

import csv
data_list = []
with open('nba.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        data_list.append([row['Name'], row['Salary']])