我是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
................
所需输出为
在我过去的试验中,我最终在列表中,因此无法转换任何一列。
我试图搜索过去的问题和答案。但未能解释所有,因为我是初学者。我希望您快速帮助将数据读入列格式,以便稍后处理。我相信,进一步处理可以照顾,因为它是更多的数学运算。
我真的感谢你的帮助。
问候
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
答案 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)。
尽管如此,我强烈推荐大熊猫,它会将你的代码质量提升到一个新的水平。