我被布置了一项家庭作业(job)任务,要在不使用Pandas的情况下从CSV文件中获取数据.CSV文件中的信息包含标题,如...

  1. 工作年份:
  2. 经验级别:EN入门级/初级MI中级/中级SE高级/专家前执行级/总监
  3. 就业类型:PT兼职FT全职CT合同FL自由职业者
  4. 职位名称:
  5. 薪水:
  6. 薪资币种:
  7. Salaryinusd:以美元表示的工资
  8. 雇员住所:雇员的主要居住国
  9. 远程比率:

其中一个问题是:

对于每个经验水平,计算每个职位的平均工资(超过3年(2020/21/22))?

我成功做到这一点的唯一方法是遍历CSV,并根据经验水平和职位添加大量的‘if’语句,但这花费了我永远的时间.

对于如何以不同的方式解决这个问题,有什么 idea 吗?未使用任何库/模块.

我的代码示例:


with open('/Users/xxx/Desktop/ds_salaries.csv', 'r') as f:
    csv_reader = f.readlines()
    for row in csv_reader[1:]:
        new_row = row.split(',')
        experience_level = new_row[2]
        job_title = new_row[4]
        salary_in_usd = new_row[7]

        if experience_level == 'EN' and job_title == 'AI Scientist':
            en_ai_scientist += int(salary_in_usd)
            count_en_ai_scientist += 1

avg_en_ai_scientist = en_ai_scientist / count_en_ai_scientist

print(avg_en_ai_scientist)

生效日期:

enter image description here

推荐答案

在计算出这样一个例子时,我发现这样问很有帮助:"什么样的数据 struct 可以使这个问题更容易回答?"

例如,这个问题会问

对于每个经验水平,计算每个职位的平均工资(超过3年(2020/21/22))?

对我来说,这意味着我想要一本以经验水平和职称的元组为关键字的词典,上面有每个匹配的人的工资.大概是这样的:

data = {
    ("EN", "AI Scientist"): [1000, 2000, 3000],
    ("SE", "AI Scientist"): [2000, 3000, 4000],
}

下一个问题是:如何将我的数据转换为该格式?我将使用csv.DictReader读入数据,并将每个工资数字添加到 struct 中.

data = {}
with open('input.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        experience_level = row['first_name']
        job_title = row['last_name']
        key = experience_level, job_title
        if key not in data:
            # provide default value if no key exists
            # look at collections.defaultdict if you want to see a better way to do this
            data[key] = []
        data[key].append(row['salary_in_usd'])

现在,您已经组织好数据,可以计算平均工资了:

for (experience_level, job_title), salary_data in data:
    print(experience_level, job_title, sum(salary_data)/len(salary_data))

Python相关问答推荐

Pandas或pyspark跨越列创建

如何使用函数正确索引收件箱?

为什么基于条件的过滤会导致pandas中的空数据框架?

已删除的构造函数调用另一个构造函数

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

将DF中的名称与另一DF拆分并匹配并返回匹配的公司

如果条件为真,则Groupby.mean()

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

什么相当于pytorch中的numpy累积ufunc

Python库:可选地支持numpy类型,而不依赖于numpy

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

所有列的滚动标准差,忽略NaN

cv2.matchTemplate函数匹配失败

移动条情节旁边的半小提琴情节在海运

从嵌套的yaml创建一个嵌套字符串,后面跟着点

python中的解释会在后台调用函数吗?

为什么if2/if3会提供两种不同的输出?

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

找到相对于列表索引的当前最大值列表""