ps之前已经稍微处理过相关的csv文件,但是没有记录,发现基本忘光了看来记录还是一件非常重要的事情。碰巧DSB2017grt团队的代码里用的csv比较奇葩,我就把天池的数据的csv改成他们使用的模样。加油。

1.他们的shorter.csv

000,1.3.6.1.4.1.14519.5.2.1.6279.6001.100225287222365663678666836860
001,1.3.6.1.4.1.14519.5.2.1.6279.6001.100332161840553388986847034053
002,1.3.6.1.4.1.14519.5.2.1.6279.6001.100398138793540579077826395208
003,1.3.6.1.4.1.14519.5.2.1.6279.6001.100530488926682752765845212286
004,1.3.6.1.4.1.14519.5.2.1.6279.6001.100620385482151095585000946543
005,1.3.6.1.4.1.14519.5.2.1.6279.6001.100621383016233746780170740405
006,1.3.6.1.4.1.14519.5.2.1.6279.6001.100684836163890911914061745866
007,1.3.6.1.4.1.14519.5.2.1.6279.6001.100953483028192176989979435275
008,1.3.6.1.4.1.14519.5.2.1.6279.6001.101228986346984399347858840086
009,1.3.6.1.4.1.14519.5.2.1.6279.6001.102133688497886810253331438797
010,1.3.6.1.4.1.14519.5.2.1.6279.6001.102681962408431413578140925249

上面的序号+名字

实现代码:

# coding=UTF-8
import pandas as pd
import os
#我把验证集也放入训练集里了分别命名为train_subset15-train_subset19
tianchi_raw='/media/pacs/0000E2850005C030/DcmData/xlc/tanchi/sharelink4184761691-814629355569975/天池大赛肺部结节智能诊断/train/'
subsetdirs = [os.path.join(tianchi_raw, f) for f in os.listdir(tianchi_raw) iff.startswith('train_subset') and os.path.isdir(os.path.join(tianchi_raw, f))]#获取所有文件夹路径如到tianchi_raw+‘train_subset15’
namelist=[]
for i in range(len(subsetdirs)):for filename in os.listdir(subsetdirs[i]):if filename[-4:]=='.mhd':namelist.append(filename[:-4])
save_name=pd.DataFrame({'name':namelist})#'name'必须有不然会报错。
save_name.to_csv('shorter.csv',header=False,index=True)

结果是如下:

0,LKDS-00001
1,LKDS-00003
2,LKDS-00004
3,LKDS-00005
4,LKDS-00007
5,LKDS-00011
6,LKDS-00013
7,LKDS-00015
8,LKDS-00016
9,LKDS-00019
10,LKDS-00020

其他方法代码:

# coding=UTF-8
import pandas as pd
import os
import globtianchi_raw='/media/pacs/0000E2850005C030/DcmData/xlc/tanchi/sharelink4184761691-814629355569975/天池大赛肺部结节智能诊断/train/'
df = pd.DataFrame(columns=['seriesuid'])
subsetdirs = [os.path.join(tianchi_raw, f) for f in os.listdir(tianchi_raw) iff.startswith('train_subset') and os.path.isdir(os.path.join(tianchi_raw, f))]
ii=1for i in range(len(subsetdirs)):for filename in os.listdir(subsetdirs[i]):if filename[-4:]=='.mhd':data={'seriesuid':filename[:-4]}index=pd.Index(data=[ii],name='id')#定义序号dfn=pd.DataFrame(data,index=index)df = pd.concat([df, dfn], ignore_index=True)#默认按行拼接,按列拼接加参数axis=1ii=ii+1
df.to_csv('annotations2.csv',header=False,index=True)

上面这个代码是我的第一版现在想想好蠢啊,一个名字定义一个数据框架(也就是表),然后拼接起来,哈哈哈。

2.他们的lunaqualified.csv

5,-24.014,192.1,-391.08,8.1433
5,2.4415,172.46,-405.49,18.545
5,90.932,149.03,-426.54,18.209
5,89.541,196.41,-515.07,16.381
7,81.51,54.957,-150.35,10.362
10,105.06,19.825,-91.247,21.09
12,-124.83,127.25,-473.06,10.466
14,-106.9,21.923,-126.92,9.7453
16,2.2638,33.526,-170.64,7.1685
17,-70.551,66.359,-160.94,6.6422

用对应第一个文件的序号替代文件名字。(后面是xyzd)

这里解释一下,前面暗含的保留几位小数点以及过滤掉6mm以下的结节这两步我就不弄了。

实现代码

第一步:先将两个标注信息拼接起来(训练集和验证集)得到annotations_together.csv

# coding=UTF-8
import pandas as pd
import os
import glob
#我把train和val的annotations.csv重新命名并放在了一起。
csv_files = glob.glob('/media/pacs/0000E2850005C030/DcmData/xlc/tanchi/sharelink4184761691-814629355569975/天池大赛肺部结节智能诊断/csv/合并/*.csv')
df = pd.DataFrame(columns=['seriesuid', 'coordX', 'coordY', 'coordZ', 'diameter_mm'])
for csv in csv_files:df = pd.merge(df,pd.read_csv(csv),how='outer')
df.to_csv('annotations_together.csv',header=True,index=False)
seriesuid,coordX,coordY,coordZ,diameter_mm
LKDS-00375,-122.003793556,128.088202005,384.529998779,7.77904231077
LKDS-00640,69.8244009958,103.039681448,251.599975586,23.8006292592
LKDS-00728,93.1056798986,163.855363176,225.5,11.0826543246
LKDS-00095,115.437994164,-153.882553652,-104.800001383,8.40507666939
LKDS-00807,52.6415211306,15.0564420021,69.5354003906,12.3348918533
...
LKDS-00161,-91.2077242944,-129.558625252,32.6999982595,13.9877103298
LKDS-00864,77.1092168414,4.14245411706,174.5,14.4626808554
LKDS-00570,-75.3992919922,238.30329895,194.724975586,11.2967527665
LKDS-00570,96.3452785326,217.390879755,269.724975586,4.60107130749
LKDS-00010,-111.182779948,217.531738281,-275.400024414,4.43397444007

用pd.concat也很很方便:

# coding=UTF-8
import pandas as pd
import os
import glob
#我把train和val的annotations.csv重新命名并放在了一起。
csv_files = glob.glob('/media/pacs/0000E2850005C030/DcmData/xlc/tanchi/sharelink4184761691-814629355569975/天池大赛肺部结节智能诊断/csv/合并/*.csv')
df = pd.DataFrame(columns=['seriesuid', 'coordX', 'coordY', 'coordZ', 'diameter_mm'])
for csv in csv_files:df = pd.concat([df, pd.read_csv(csv)], axis=0)
df.to_csv('annotations_together.csv',header=True,index=False)

第二步:按照我们在1中得到的shorter.csv,把上一步得到的annotations_together.csv中'seriesuid'中名字替换成shorter.csv中序号。

# coding=UTF-8
import pandas as pd
import os
import globshh=pd.read_csv('shorter.csv')
att=pd.read_csv('annotations_together.csv')print(att['seriesuid'][1243])
print(len(att))
# #直接赋值修改数据两种方法参考:https://blog.csdn.net/dark_tone/article/details/80179644
# df.at[0,'城市']='天津'
# #或者用.loc效果一样
# df.loc[0,'城市']='天津'
print(shh.loc[0][1])#由于我没有header了,得用[0][0]。loc改为at不行。for i in range(len(att)):for j in range(len(shh)):if shh.loc[j][1]==att['seriesuid'][i]:att['seriesuid'][i]=shh.loc[j][0]break
att.to_csv('lunaqualified.csv',header=False,index=False)
221,-122.003793556,128.088202005,384.529998779,7.77904231077
374,69.8244009958,103.039681448,251.599975586,23.8006292592
428,93.1056798986,163.855363176,225.5,11.0826543246
58,115.437994164,-153.882553652,-104.800001383,8.40507666939
475,52.6415211306,15.0564420021,69.5354003906,12.3348918533
475,-44.7023808214,66.1236872439,100.535400391,8.28980791179
475,-108.547683716,-14.5947265625,116.535400391,7.23274492721
475,-119.902752776,6.93833234441,174.535400391,10.6162775597
86,-129.004266036,-145.044870477,1973.20001185,13.6076118378
86,-129.482627467,-145.365182977,1973.80001187,13.9016228368

完美搞定了嘻嘻,但是花了不少时间,果然好记性不如烂笔头啊哈哈哈。

3.给个筛选掉6mm一下代码思路:df[df['diameter_mm']>6]即可就这么简单。

添加:好像还挺简单的就把代码也贴下

# coding=UTF-8
import pandas as pd
import os
import globatt=pd.read_csv('annotations_together.csv')
aa=att[att['diameter_mm']>=6]
aa.to_csv('sift.csv',header=True,index=False)

结果天池的结节数从1244减少到了843.(初赛的800个CT(训练加验证))。

ps:良心原创,对你有帮助别忘了点赞哦。

ps:添加关于前面的第二点中第二步的代码出现了细节错误,坑了我3个多小时。

shh.loc[j][0] 当j=0的时候,shh.loc[0][0]取到的是第二行的第一个数,第一行的数是取不到的。故第一点中的代码
save_name.to_csv('shorter.csv',header=False,index=True)改为header=True即可。

天池csv转成grt代码里的luna的csv,pandas库来操作csv文件(pd.DataFrame,pd.concat,pd.Series,to_csv等)实现相关推荐

  1. python pandas库读取excel/csv中指定行或列数据详解

    通过阅读表格,可以发现Pandas中提供了非常丰富的数据读写方法,下面这篇文章主要给大家介绍了关于python利用pandas库读取excel/csv中指定行或列数据的相关资料,需要的朋友可以参考下 ...

  2. python 利用pandas库实现 读写 .csv文件

    最近在处理ILSVRC12数据集,有一个需求就是将图片路径和标签写入.csv文件中,这里我们用到了pandas库,当然也有不用pandas库的方法,这里不再介绍,因为pandas处理起来是真的香啊 1 ...

  3. Python+pywin32操作Excel文件常用功能(268行代码+注释)

    全国高校教师Python课程高级研修班(线上,11月20-21日) 中国大学MOOC"Python程序设计基础"第5次开课 推荐图书: <Python程序设计(第3版)> ...

  4. 解决pandas处理json为csv格式时的中文乱码

    将json文件: 转为csv格式的训练数据集,运行: #!/usr/bin/env python # -*- coding:utf-8 -*- import os import csv import ...

  5. csv文件怎么转成excel_Python操作Excel文件(1):花式大师pyexcel

    本文共2900余字,预计阅读时间12分钟,本文知乎连接:Python操作Excel文件(1):花式大师pyexcel,本文同步发布于silaoA的博客和微信公众号平台. 关注学习了解更多的Cygwin ...

  6. SAP PM 初级系列23 - IW22 事务代码里创建维修工单

    SAP PM 初级系列23 - IW22 事务代码里创建维修工单 SAP PM模块里,事务代码IW22用于修改一个已经存在的维修通知单. 实际上在这个界面里,不仅可以修改维修通知单相关的数据,而且可以 ...

  7. 四十年前的 6502 CPU 指令翻译成 JS 代码会是怎样

    去年折腾的一个东西,之前 blog 里也写过,不过那时边琢磨边写,所以比较杂乱,现在简单完整地讲解一下. 前言 当时看到一本虚拟机相关的书,正好又在想 JS 混淆相关的事,无意中冒出个想法:能不能把某 ...

  8. c++ class struct同名_如何把C++的源代码改写成C代码?而C改C++只需一步!

    ★ 如何把C++的源代码改写成C代码? C++解释器比C语言解释器占用的存储空间要大,想要在某些特定场合兼容C++代码,同时为了节省有限的存储空间,降低成本,也为了提高效率,将用C++语言写的源程序用 ...

  9. 从循环条件的代码里,我能在面试中甄别程序员是否是高级

    一般来说,工作经验满3后,程序员就达到了高级程序员的年限要求,但能力上是否达到?又如何在面试里短短30分钟里验证程序员是否达到高级程序员的水准?我会那个大家一定用到过的循环语句来作为面试题. 我们可以 ...

最新文章

  1. Oracle11g与Oracle11gxe有什么区别
  2. Net::SSH::Perl 模块
  3. 精准扶贫探索新融合模式-农业大健康·李龙:谋定乡村振兴
  4. 如何做到自动化运营--数据驱动
  5. CodeForces 1131G. Most Dangerous Shark
  6. 内存淘汰机制 LRU cache
  7. Prince2与PMP的区别
  8. java 数据库外键查询_oracle中查询所有外键引用到某张表的记录
  9. cli3解决 ie11语法错误 vue_【VUE3.0】它来了,2020年09月18日,Vue.js 3.0 正式发布,但是........
  10. 温故而知新 js 的错误处理机制
  11. scala的函数(day02)
  12. N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)
  13. VS2017和VS2019(社区版)离线激活方式
  14. 软考网络工程师第一章复习
  15. 【自定义搜索引擎】Google Chrome管理搜索引擎和网站搜索
  16. 19841227同生缘
  17. 第一代电子计算机主要使用,第一代电子计算机主要采用的电子元件是什么?
  18. b站取消视频自动播放、自动续播(电脑端)
  19. 视频去水印在线网站?
  20. 什么是m叉树_品读 | 记忆深处那些树

热门文章

  1. 操作系统作业3 xv6 CPU alarm
  2. bzoj 3156: 防御准备
  3. 基于visual Studio2013解决C语言竞赛题之1067间隔排序
  4. 【转】详细图解Vmware与主机间共享文件的方法
  5. 使用抓包工具fiddler和apipost进行接口测试
  6. 性能测试之JMeter函数助手详解
  7. 对JMETER组件的认知
  8. 对atexit函数的理解
  9. 其他测试用例设计方法-错误推测法与正交实验法
  10. activiti前端画图转化_用于Activiti前端显示流程图的插件