首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSV文件中每个字段中值的最小值";"-delimited列表

CSV文件中每个字段中值的最小值";"-delimited列表
EN

Unix & Linux用户
提问于 2023-03-27 12:49:22
回答 2查看 149关注 0票数 -1

我有一个很大的CSV文件,其中有些单元格中有多个值。如何更改这些单元格,使它们只包含最小值?

例如,考虑到这种输入:

代码语言:javascript
复制
id,disease_1,disease_2
1001,2008;2009,2009;2010 

备注

  1. 列/字段分隔符是逗号,
  2. 每个单元格中的值由分号、;分隔,并按升序排序。
  3. 我想从第2列开始我的算法

期望产出:

代码语言:javascript
复制
id,disease_1,disease_2
1001,2008,2009
EN

回答 2

Unix & Linux用户

发布于 2023-03-27 15:18:45

如果这是一个简单的CSV:

代码语言:javascript
复制
$ perl -MList::Util=min -F, -le 'print join ",", shift@F, map {min split /;/} @F' file.csv
id,disease_1,disease_2
1001,2008,2009
票数 3
EN

Unix & Linux用户

发布于 2023-03-27 13:28:32

正如您说的,您更喜欢Python和SQL:

编写一个Python脚本,它:

  1. 在输入CSV中打开,
  2. 使用sqlite3模块创建SQLite数据库,使用CSV的第一行定义列(可能都是INTEGER类型?)
  3. 对于每一行:
    1. 用逗号隔开每一行,
    2. 对于由此产生的每个元素:
      1. 分号
      2. 获取min( int(value) for values in splitted )或类似的
      3. 将结果整数放在列表的末尾。

代码语言:javascript
复制
1. write the complete row list to the sqlite3 databse file
  1. 完成后,保存sqlite3数据库文件,并可选择地将其导出到CSV,如果您真的需要CSV格式(您说您对SQL更满意,所以尽早远离CSV )

现在,将您的数据放在SQLite数据库文件中,您可以对它运行SQL查询--这比处理CSV数据要好得多。此外,您也会很高兴看到更快的事情,比如在数据库中查找东西。CSV是一种“最坏情况”的数据库格式:您需要始终读取所有先前的行才能找到第N行;始终需要读取所有以前的列才能找到Mth列。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/741102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档