导入文本文件以处理特定列

时间:2016-05-05 08:15:28

标签: python datacolumncollection


我是python使用的新手。但要通过实践来学习在我的数据处理中使用。

我有一个大数据文件,格式如下所示。
始终未知的行数和列数。在此示例中,显示了2个连续的行 第一列是"时间"第n列是从标识符中选择的相关数据(' abc'在第1行)。

................
" 2013-01-01 00:00:02" 228 227 15.65 15.84 14.85 14.68 14.53 13.75 12.45 12.55
" 2013-01-02 00:01:03" 225 227 16.35 15.99 14.85 14.73 14.43 13.8 12.85 13.2
................

所需输出为

  1. Column1 =就时间而言,时间差可以是 计算。
  2. column(n)=要进一步处理的数据,应该在 浮。
  3. 在我过去的试验中,我最终在列表中,因此无法转换任何一列。

    我试图搜索过去的问题和答案。但未能解释所有,因为我是初学者。我希望您快速帮助将数据读入列格式,以便稍后处理。我相信,进一步处理可以照顾,因为它是更多的数学运算。

    我真的感谢你的帮助。

    问候
    Gouri

    更正-1:我理解 pandas 提供了一个紧凑版本来提取我之前需要的列。小组建议后的良好学习。
    代码如下:

    import pandas as pd
    data = pd.read_csv(fp, sep='\t')
    entry=[]
    entry = data['u90']
    print entry, '\n', entry[5]
    
    out_file = open("out.txt", "w")
    entry.to_csv(out_file)
    

    问候
    Gouri

3 个答案:

答案 0 :(得分:1)

如果您对使用正则表达式而不是pandas感兴趣,那么对于您的数据集,以下代码可以正常工作。

import re

#l1 = ["\"2013-01-01 00:00:02\" 228 227 15.65 15.84 14.85 14.68 14.53 13.75 12.45 12.55",
#"\"2013-01-02 00:01:03\" 225 227 16.35 15.99 14.85 14.73 14.43 13.8 12.85 13.2"]

l1 = """"2013-01-01 00:00:02\" 228 227 15.65 15.84 14.85 14.68 14.53 13.75 12.45 12.55
"2013-01-02 00:01:03\" 225 227 16.35 15.99 14.85 14.73 14.43 13.8 12.85 13.2"""

l_match = re.findall(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\"\s\d+\s\d+\s\d+\.\d+\s(\d+\.\d+)',l1)

if l_match:
    for each_find in l_match:
        l_date = each_find[0]
        l_number = float(each_find[1])
        print l_date
        print l_number

<强>输出

2013-01-01 00:00:02
15.84
2013-01-02 00:01:03
15.99

答案 1 :(得分:0)

正如Hugo Honorem在评论中指出的那样,您可以使用pandas

如果您不想为项目引入更多依赖项,可以使用如下函数:

from operator import itemgetter

def load_dataset(fp, columns, types=None, delimiter=' ', skip_header=True):
    get_columns = itemgetter(*columns)
    if skip_header:
        next(fp)
    dataset = []
    for line in fp:
        parts = line.split(delimiter)
        columns = get_columns(parts)
        if types is not None:
            columns = [convertor(col) for convertor, col in zip(types, columns)]
        dataset.append(columns)
    return dataset

columns应该是整数列表,types是可调用对象的列表,用于将所需列转换为您希望它们的类型。对于浮点数,只需传入float即日期,您可以传递自定义to_date函数。

答案 2 :(得分:0)

您拥有的是CSV文件,其中以空格作为分隔符,因此您可以使用CSV库(https://docs.python.org/2/library/csv.html)。否则,您可以逐行阅读并使用split()

进行解析
f = open('myfile.csv','r')
for line in f.readlines():
    date = line.split(' ')[0]
    value = line.split(' ')[N]

其中N是您的值所在的列(在您的示例中为4)。

尽管如此,我强烈推荐大熊猫,它会将你的代码质量提升到一个新的水平。