我有一个名为"saleses.csv"的csv文件,文件内容如下:

City,Job,Salary

Delhi,Doctors,500

Delhi,Lawyers,400

Delhi,Plumbers,100

London,Doctors,800

London,Lawyers,700

London,Plumbers,300

Tokyo,Doctors,900

Tokyo,Lawyers,800

Tokyo,Plumbers,400

Lawyers,Doctors,300

Lawyers,Lawyers,400

Lawyers,Plumbers,500

Hong Kong,Doctors,1800

Hong Kong,Lawyers,1100

Hong Kong,Plumbers,1000

Moscow,Doctors,300

Moscow,Lawyers,200

Moscow,Plumbers,100

Berlin,Doctors,800

Berlin,Plumbers,900

Paris,Doctors,900

Paris,Lawyers,800

Paris,Plumbers,500

Paris,Dog catchers,400

我需要打印每个职业的工资中位数。我尝试了一个代码,它显示了一些错误。

我的代码是:

from StringIO import StringIO

import sqlite3

import csv

import operator #from operator import itemgetter, attrgetter

data = open('sal.csv', 'r').read()

string = ''.join(data)

f = StringIO(string)

reader = csv.reader(f)

conn = sqlite3.connect(':memory:')

c = conn.cursor()

c.execute('''create table data (City text, Job text, Salary real)''')

conn.commit()

count = 0

for e in reader:

if count==0:

print""

else:

e[0]=str(e[0])

e[1]=str(e[1])

e[2] = float(e[2])

c.execute("""insert into data values (?,?,?)""", e)

count=count+1

conn.commit()

labels = []

counts = []

count = 0

c.execute('''select count(Salary),Job from data group by Job''')

for row in c:

for i in row:

if count==0:

counts.append(i)

count=count+1

else:

count=0

labels.append(i)

c.execute('''select Salary,Job from data order by Job''')

count = 1

count1 = 1

temp = 0

pri = 0

lis = []

for row in c:

lis.append(row)

for cons in counts:

if cons%2 == 0:

pri = cons/2

else:

pri = (cons+1)/2

if count1 == 1:

for li in lis:

if count == pri:

print"Median is",li

count = count + 1

count = 0

temp = pri+cons

else:

for li in lis:

if count == temp:

print"Median is",li

count = count+1

count = 0

temp = temp + pri

count1 = count1 + 1

但是,它显示了一些错误:

IndentationError('expected an indented block', ('', 28, 2, 'if count==0:

'))

如何修复错误?

这是很多代码。你真的需要所有这些来证明你的问题吗?把你的程序减少到最短的程序,以证明你的错误。我怀疑结果将是一个两行或三行程序。

"Rob?"请在这方面帮助我。A是Python领域的新手。

你想要每个职业的平均工资吗?

@是的,水管工500名律师700名医生800名

@丹尼尔希门尼斯有什么简单的解决办法吗?

如果您使用的是数据库,为什么不使用平均函数呢?

例如,从数据组中按职务选择平均工资(salary);

仅供参考:平均值和中位数不是一回事——它们是相关的,但功能不同。

您在错误消息中对行的缩进与下面对应的else语句不匹配。

你可以使用defaultdict把每个职业的所有薪水放在一起,然后得到中位数。

import csv

from collections import defaultdict

with open("C:/Users/jimenez/Desktop/a.csv","r") as f:

d = defaultdict(list)

reader = csv.reader(f)

reader.next()

for row in reader:

d[row[1]].append(float(row[2]))

for k,v in d.iteritems():

print"{} median is {}".format(k,sorted(v)[len(v) // 2])

print"{} average is {}".format(k,sum(v)/len(v))

输出

Plumbers median is 500.0

Plumbers average is 475.0

Lawyers median is 700.0

Lawyers average is 628.571428571

Dog catchers median is 400.0

Dog catchers average is 400.0

Doctors median is 800.0

Doctors average is 787.5

您使用的是python 2——所以,请注意acverage的划分:.format(k,sum(v)/len(v))——因为它向下取整为int,除非您修复了它。

根据@jsbueno建议编辑

@我用的是python 2,格式显示错误!

@danieljimenez~从将来的import with_statement import csv from collections import defaultdict with open("sales.csv","r")as f:d=defaultdict(list)reader=csv.reader(f)reader.next()for row in reader:d[row[1]].append(row[2])for k,v in d.iteritems():print"%d median is%d"%(k,sorted(v)[len(v)]//2)

我用的是2.7,它对我很有用。我不认为你在评论中使用了格式函数。您要打印"{%s} median is {%d}" % (k,sorted(v)[len(v) // 2])。

@danieljimenez attributeError("'str'对象没有属性'format'",)错误

如果我使用格式函数,就会显示这个错误!^

您使用的是哪种版本的python?

根据上一个问题,您需要对旧版本的python进行编号格式设置,您使用的是小于2.5的格式。

现在完成!谢谢!赞成票!:)

酷!你愿意接受我的回答吗@dipayandev

使用pandas很容易(http://pandas.pydata.org):

import pandas as pd

df = pd.read_csv('test.csv', names=['City', 'Job', 'Salary'])

df.groupby('Job').median()

#               Salary

# Job

# Doctors          800

# Dog catchers     400

# Lawyers          700

# Plumbers         450

如果你想要平均值而不是中间值,

df.groupby('Job').mean()

#                   Salary

# Job

# Doctors       787.500000

# Dog catchers  400.000000

# Lawyers       628.571429

# Plumbers      475.000000

如果您的问题是计算中间值,而不是将所有内容都插入到SQL数据库中并对其进行混乱,只需阅读所有行,将所有工资分组在一个列表中,并从中获取中位数-这会将您的百行量级脚本减少到:

import csv

professions = {}

with open("sal.csv") as data:

for city, profession, salary in csv.reader(data):

professions.setdefault(profession.strip(), []).append(int(salary.strip()))

for profession, salaries in sorted(professions.items()):

print ("{}: {}".format(profession, sorted(salaries)[len(salaries//2)] ))

(给出或取"1"从分类工资中得到适当的中位数)

在评论中,op说他是"平均"的意思,而且,我怀疑你的代码运行,因为字典没有set_default作为属性。(掉头。)

将"设置默认值"改为"设置默认值"。谢谢。另外,这个示例代码不会跳过标题行,但是回答问题的想法是一样的。

除了删除标题行之外,还需要对代码进行另一个更改:len(salaries//2)->len(salaries)//2。

python查找csv中某个数据_使用Python从CSV文件中查找中值相关推荐

  1. python怎样清除csv中的数据_使用d清除CSV文件中的数据

    我试图从GCS读取一个CSV(带头)文件,该文件大约有150列,然后 1为特定列设置列数据 2用空值更新所有列的NaN 三.将csv文件(带标题)写入GCS 这里有一个棘手的部分:处理是在云数据流上完 ...

  2. python向mysql中添加数据_通过python操控MYSQL添加数据,并将数据添加到EXCEL中-阿里云开发者社区...

    第一步 在python中创建mysql数据表 import pymysql #导入模块 def getCon(): #联接到数据库,并封装循环使用,db是数据库名字 conn = pymysql.co ...

  3. python从文件中读取数据_【Python】从文件中读取数据

    从文件中读取数据 1.1 读取整个文件 要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下) PI_DESC.txt 3.1415926535 ...

  4. python提取excel表中的数据_用python从excel工作表中提取和操作数据

    场景:我正在尝试编写一个python代码,它读取给定文件夹中的所有工作簿,获取每个工作簿的数据并将其放入单个数据帧中(每个工作簿都成为一个数据框,因此我可以单独操作它们).在 问题1:对于此代码,即使 ...

  5. python 爬取链家数据_用python爬取链家网的二手房信息

    题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...

  6. python爬取网页实时数据_使用 Python 爬取网页数据

    1. 使用 urllib.request 获取网页 urllib 是 Python 內建的 HTTP 库, 使用 urllib 可以只需要很简单的步骤就能高效采集数据; 配合 Beautiful 等 ...

  7. 向对象中添加数据_在RMarkdown编译HTML文件中添加数据下载按钮

    介绍一个工具包, 主要是用来解决我平常写文档时文档和结果分离的问题. 它可以在 RMarkdown 输出的 HTML 文件中添加下载数据的按钮, 而不需要运行 shiny 模式. 安装 install ...

  8. python向excel隔行写数据_【Python】将每日新增数据写入Excel

    一.背景: 因为自己从网上获取了一些金融数据,也没有配置数据库,所以目前暂时是将数据以增量的形式存储在自己的OneDrive上. 二.代码演绎:导入相关数据包 import pandas as pd ...

  9. python 循环定时器 timer显示数据_【Python】多线程、定时循环爬取优信二手车信息...

    爬虫 爬取优信二手车:循环遍历每页,获取相应的有价值字段信息,这里不详细阐释了. 多线程 Python中,使用concurrent.futures模块下的ThreadPoolExecutor类来实现线 ...

  10. 基于python的爬虫系统金融数据_基于Python的互联网金融数据采集

    基于Python的互联网金融数据采集 □文/王 蕾1安英博1刘佳杰2 [提要] 互联网金融数据中潜藏着未知的知识价值,但也存在着巨量的数据冗余.通过Python可以进行互联网金融数据的获取.解析.提取 ...

最新文章

  1. python中文对齐_Python中英文对齐终极解决方案
  2. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)...
  3. PMCAFF|盘点2016最值得突击的七大海外市场:最后一年窗口期,不出海就出局!...
  4. 字节跳动 2019 ICME 双赛道冠军团队方案分享
  5. Design Patterns - Mediator Pattern
  6. zigbee协议栈的系统相关函数的使用 仿照协议栈写事件
  7. (97)FPGA手写RAM(Verilog)
  8. 安卓判断服务器返回的状态码,关于服务器返回的十四种常见HTTP状态码详解
  9. VALSE学习(七):跨媒体分析-Cross-Media Analysis and Intelligence
  10. Atitit 研发体系 codelib 代码库的建设 目录 1. 概念与组成 2 1.1. Java代码 2 1.2. Js代码 2 1.3. H5 代码 js+css+htm+txt 2 1.4.
  11. SAP ABAP 教程大全之 01 面向初学者的 SAP ABAP介绍(含hello world 源码)
  12. 学习类APP如何规范?
  13. P7369 [COCI2018-2019#4] Elder 题解
  14. 白加黑加载方式_AVG中国实验室发现“白加黑”型恶意程序
  15. 现在互联网是外包公司天下了吗?程序员说不可能,但是…
  16. 新手做网站优化要思考三个本质问题!
  17. C语言中结构体struct的用法总结
  18. java-斗地主无界面无序
  19. 设置Spyder的整个界面为暗色配色(全部为dark theme,不仅仅Syntax coloring为暗色背景)
  20. 计算机鼠标不动了,鼠标不动了怎么办,教您鼠标不动了怎么办

热门文章

  1. AI基础:图解Transformer
  2. 真正准确的“两个日期相差多少天”函数
  3. Microsemi Libero系列教程(一)——Libero开发环境介绍、下载、安装与注册
  4. 树莓派CM4_5G扩展板搭载展锐国货5G在Kali系统下免驱即插即用演示
  5. JS的unshift()和shift()
  6. 127.0.0.1 已拒绝连接
  7. LeetCode | 347. Top K Frequent Elements
  8. linux挂载VMFS硬盘,挂载ESXi服务器VMFS存储卷
  9. Off the coast 将图片放入Markdown!
  10. mysql查询表_mysql数据库表的查询操作-总结