我有几个.txt文件,每个文件有140k +行。它们都有三种类型的数据,它们是字符串和浮点数的混合: -7列 -14列 -18列
解析此类数据的最佳最快方法是什么?
我尝试将numpy.genfromtxt与usecols = np.arange(0,7)一起使用,但显然切出14和18 col数据。
# for 7 col data
load = np.genfromtxt(filename, dtype=None, names=('day', 'tod', 'condition', 'code', 'type', 'state', 'timing'), usecols=np.arange(0,7))
我想尽可能高效地解析数据。
答案 0 :(得分:0)
该解决方案非常简单直观。我们检查每行中的列数是否等于指定的数,并将其附加到数组中。为了更好地分析/修改我们的数据,我们可以根据需要将其转换为Pandas DataFrame或Numpy,下面我将显示转换为DataFrame。数据集中的列数是7、14和18。我希望对数据进行标记,因此可以使用Pandas的列从数组中进行标记。
import pandas as pd
filename = "textfile.txt"
labels_array1 = [] # 7 labels
labels_array2 = [] # 14 labels
labels_array3 = [] # 18 labels
with open(filename, "r") as f:
lines = f.readlines()
for line in lines:
num_items = len(line.split())
if num_items==7:
array1.append(line.rstrip())
elif num_items==14:
array2.append(line.rstrip())
elif num_items==18:
array3.append(line.rstrip())
else:
print("Detected a line with different columns.", num_items)
df1 = pd.DataFrame([sub.split() for sub in array1], columns=labels_array1)
df2 = pd.DataFrame([sub.split() for sub in array2], columns=labels_array2)
df3 = pd.DataFrame([sub.split() for sub in array3], columns=labels_array3)