python - 仅从 CSV 文件中读取选定的列,但保证所有其他列都相同

标签 python csv file-format

我有一堆 CSV 文件,我试图将它们连接成一个 csv 文件。 CSV 文件由一个空格分隔,如下所示:

'initial', 'pos', 'orientation', 'ratio'
'chr', '106681', '+', '0.06'
'chr', '106681', '+', '0.88'
'chr', '106681', '+', '0.01'
'chr', '106681', '+', '0.02'

如您所见,除了ratio 之外,所有值都相同。我正在创建的串联文件如下所示:

'filename','initial', 'pos', 'orientation', 'ratio1','ratio2','ratio3'
'jon' , 'chr', '106681', '+', '0.06' , '0.88' ,'0.01'

所以基本上,我会遍历每个文件,只存储 initialposorientation 的一个值,但是所有的值ratio 并更新串联文件中的表。事实证明,这比我想象的要困惑得多。我有以下代码来读取 csv 文件:

concatenated_file  = open('josh.csv', "rb")
reader = csv.reader(concatenated_file)

for row in reader:
    print row

给出:

['chrom', 'pos', 'strand', 'meth_ratio']
['chr2', '106681786', '+', '0.06']
['chr2', '106681796', '+', '0.88']
['chr2', '106681830', '+', '0.01']
['chr2', '106681842', '+', '0.02']

如果有人能告诉我如何只存储 initialposorientation 的一个值(因为它们保持不变)但是 ratio

的所有值

最佳答案

这是一个带有 pandas.read_csv() 的单行代码.我们甚至可以删除引号:

import pandas as pd

csva = pd.read_csv('a.csv', header=0, quotechar="'", delim_whitespace=True)

csva['ratio']
0    0.06
1    0.88
2    0.01
3    0.02
Name: ratio, dtype: float64

几点:

  • 实际上您的分隔符是逗号 + 空格。从这个意义上说,它不是普通的 CSV。参见 "How to make separator in read_csv more flexible?"
  • 请注意,我们通过设置 quotechar="'"
  • 去掉了数字字段的引号
  • 如果您真的坚持要节省内存(不要),您可以在执行 read_csv 后删除 csva 中除“ratio”之外的所有其他列。请参阅 Pandas 文档。

关于python - 仅从 CSV 文件中读取选定的列,但保证所有其他列都相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25902166/

相关文章:

binary - 将文件打包成 ELF 可执行文件

Python elasticsearch.helpers.scan 示例

python - 使用 Python 的内置 .csv 模块编写

jquery - 使用 Django/Python 将批量 .csv 数据上传到 webapp 的好方法是什么?

c++ - Protocol Buffer : no notation for fixed size buffers?

php - PHP $_SESSION 变量键中的保留字符

python - 如何将密集层转换为 Keras 中的等效卷积层?

Python 安全字典键访问

python - mlab 中的简单箭头 mayavi/tvtk 奇怪的行为(看起来像一个错误)

Java 用两种模式分割 CSV