导入文本文件以处理特定列
import text file to process specific columns
我是 python 使用的新手。但是通过实践学习在我的数据处理中使用。
我有一个格式如下所示的大数据文件。
始终未知行数和列数。在此示例中,显示了 2 个连续的行。
第一列是 "time",第 n 列是要从标识符中选择的相关数据(第一行的 'abc')。
............
"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
...............
期望的输出为
- Column1 = 以时间为单位 这样时差就可以了
计算。
- column (n) = 要进一步处理的数据,应该在
浮动。
在我过去的试验中,我最终出现在列表中,因此无法转换任何一列。
我试图搜索过去的问题和答案。但未能全部解释,因为我是初学者。我希望您能快速帮助将数据读入列格式,以便稍后处理。我相信,进一步的处理可以小心,因为它是更多的数学运算。
非常感谢你的帮助。
此致
古里
CORRECTION-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)
此致
古里
如果您有兴趣使用正则表达式,而不是 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
正如 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
函数。
您拥有的是一个 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)。
不过,我强烈推荐pandas,它会让你的代码质量更上一层楼。
我是 python 使用的新手。但是通过实践学习在我的数据处理中使用。
我有一个格式如下所示的大数据文件。
始终未知行数和列数。在此示例中,显示了 2 个连续的行。
第一列是 "time",第 n 列是要从标识符中选择的相关数据(第一行的 'abc')。
............
"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
...............
期望的输出为
- Column1 = 以时间为单位 这样时差就可以了 计算。
- column (n) = 要进一步处理的数据,应该在 浮动。
在我过去的试验中,我最终出现在列表中,因此无法转换任何一列。
我试图搜索过去的问题和答案。但未能全部解释,因为我是初学者。我希望您能快速帮助将数据读入列格式,以便稍后处理。我相信,进一步的处理可以小心,因为它是更多的数学运算。
非常感谢你的帮助。
此致
古里
CORRECTION-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)
此致
古里
如果您有兴趣使用正则表达式,而不是 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
正如 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
函数。
您拥有的是一个 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)。
不过,我强烈推荐pandas,它会让你的代码质量更上一层楼。