在python中读取包含多个未标记变量(按列分类)的大输入文件的智能方法

在python中读取包含多个未标记变量(按列分类)的大输入文件的智能方法,python,file-io,large-files,Python,File Io,Large Files,我有下面的代码,运行了超过一百万行。但这需要很多时间。有没有更好的方法读取这些文件?当前代码如下所示: for line in lines: line = line.strip() #Strips extra characters from lines columns = line.split() #Splits lines into individual 'strings' x = columns[0]

我有下面的代码,运行了超过一百万行。但这需要很多时间。有没有更好的方法读取这些文件?当前代码如下所示:

for line in lines:
    line = line.strip()             #Strips extra characters from lines
    columns = line.split()          #Splits lines into individual 'strings'
    x = columns[0]                  #Reads in x position
    x = float(x)                    #Converts the strings to float
    y = columns[1]                  #Reads in y 
    y = float(y)                    #Converts the strings to float
    z = columns[2]                  #Reads in z 
    z = float(z)                    #Converts the strings to float
  347.528218024     354.824474847   223.554247185   -47.3141937738  -18.7595743981   
  317.843928028     652.710791858   795.452586986   -177.876355361  7.77755408015   
  789.419369714     557.566066378   338.090799912   -238.803813301  -209.784710166   
  449.259334688     639.283337249   304.600907059   26.9716202117   -167.461497735  
  739.302109761     532.139588049   635.08307865    -24.5716064556  -91.5271790951  
文件数据如下所示:

for line in lines:
    line = line.strip()             #Strips extra characters from lines
    columns = line.split()          #Splits lines into individual 'strings'
    x = columns[0]                  #Reads in x position
    x = float(x)                    #Converts the strings to float
    y = columns[1]                  #Reads in y 
    y = float(y)                    #Converts the strings to float
    z = columns[2]                  #Reads in z 
    z = float(z)                    #Converts the strings to float
  347.528218024     354.824474847   223.554247185   -47.3141937738  -18.7595743981   
  317.843928028     652.710791858   795.452586986   -177.876355361  7.77755408015   
  789.419369714     557.566066378   338.090799912   -238.803813301  -209.784710166   
  449.259334688     639.283337249   304.600907059   26.9716202117   -167.461497735  
  739.302109761     532.139588049   635.08307865    -24.5716064556  -91.5271790951  

我想从不同的列中提取每个数字。列中的每个元素都是相同的变量。我该怎么做?例如,我想要一个列表,比如说l,来存储第一列的浮动。

了解您打算对数据做什么会很有帮助,但您可以尝试:

data = [map(float, line.split()) for line in lines]

这将为您提供一个包含数据的列表。

了解您计划如何处理数据会有所帮助,但您可以尝试:

data = [map(float, line.split()) for line in lines]
这将为您提供一个包含您的数据的列表。

是为此而构建的(除其他外)

它使用numpy,在引擎盖下使用C,速度非常快。(实际上,根据您对数据的处理情况,您可能希望直接使用numpy而不是熊猫。但是,我只会在您尝试熊猫后才这样做;numpy级别较低,熊猫会让您的生活更轻松。)

以下是您读取数据的方法:

import pandas as pd

with open('testfile', 'r') as f:
    d = pd.read_csv(f, delim_whitespace=True, header=None,
                    names=['delete me','col1','col2','col3','col4','col5'])

d = d.drop('delete me',1) # the first column is all spaces and gets interpreted
                          # as an empty column, so delete it
print d
这将产生:

         col1        col2        col3        col4        col5
0  347.528218  354.824475  223.554247  -47.314194  -18.759574
1  317.843928  652.710792  795.452587 -177.876355    7.777554
2  789.419370  557.566066  338.090800 -238.803813 -209.784710
3  449.259335  639.283337  304.600907   26.971620 -167.461498
4  739.302110  532.139588  635.083079  -24.571606  -91.527179
在本例中,
d
的结果是一个强大的数据结构,称为a,它为您提供了许多快速操作数据的选项

作为一个简单的示例,这将添加前两列并获得结果的平均值:

(d['col1'] + d['col2']).mean() # 1075.97544372
熊猫也很好地处理丢失的数据;如果数据文件中存在缺失/错误值,pandas在读入这些值时会根据需要将其替换为
NaN
None

无论如何,为了快速、方便地进行数据分析,我强烈推荐这个库。

就是为此而构建的(还有许多其他东西)

它使用numpy,在引擎盖下使用C,速度非常快。(实际上,根据您对数据的处理情况,您可能希望直接使用numpy而不是熊猫。但是,我只会在您尝试熊猫后才这样做;numpy级别较低,熊猫会让您的生活更轻松。)

以下是您读取数据的方法:

import pandas as pd

with open('testfile', 'r') as f:
    d = pd.read_csv(f, delim_whitespace=True, header=None,
                    names=['delete me','col1','col2','col3','col4','col5'])

d = d.drop('delete me',1) # the first column is all spaces and gets interpreted
                          # as an empty column, so delete it
print d
这将产生:

         col1        col2        col3        col4        col5
0  347.528218  354.824475  223.554247  -47.314194  -18.759574
1  317.843928  652.710792  795.452587 -177.876355    7.777554
2  789.419370  557.566066  338.090800 -238.803813 -209.784710
3  449.259335  639.283337  304.600907   26.971620 -167.461498
4  739.302110  532.139588  635.083079  -24.571606  -91.527179
在本例中,
d
的结果是一个强大的数据结构,称为a,它为您提供了许多快速操作数据的选项

作为一个简单的示例,这将添加前两列并获得结果的平均值:

(d['col1'] + d['col2']).mean() # 1075.97544372
熊猫也很好地处理丢失的数据;如果数据文件中存在缺失/错误值,pandas在读入这些值时会根据需要将其替换为
NaN
None


无论如何,为了快速、简单的数据分析,我强烈推荐这个库。

也会稍微快一点,作为列表理解。不需要
.strip()
--
.split()
会自动在末尾删除空白。我想从不同的列中提取每个数字。列中的每个元素都是相同的变量。我该怎么做?例如,我想要一个列表,l,用来存储第一列的浮点值。
[j[0]表示数据中的j]
提取第一列<如果你需要做大量的操作,那么code>pandas或
numpy
/
scipy
可能是一个更好的主意。对于numpy,您可以
numpy.array(data)[:,0]
来获取第一列。作为列表理解,也会稍微快一点。无需
.strip()
--
.split()
将自动在末尾删除空格。我想从不同的列中提取每个数字。列中的每个元素都是相同的变量。我该怎么做?例如,我想要一个列表,l,用来存储第一列的浮点值。
[j[0]表示数据中的j]
提取第一列<如果你需要做大量的操作,那么code>pandas或
numpy
/
scipy
可能是一个更好的主意。对于numpy,您可以
numpy.array(data)[:,0]
获取第一列。我想从不同的列中提取每个数字。列中的每个元素都是相同的变量。我该怎么做?例如,我想要一个列表,l,用来存储第一列的浮动。我不确定我是否理解这个问题。。。?您当然可以将内容发送到列表,但将所有内容保存在数据结构(数据帧和系列)中要快得多,也容易得多。
d['col1']
本质上是第一列中所有值的列表。这只是一个超级快速的列表,有额外的方法来计算。谢谢,我现在明白你说的了。我想从不同的列中提取每个数字。列中的每个元素都是相同的变量。我该怎么做?例如,我想要一个列表,l,用来存储第一列的浮动。我不确定我是否理解这个问题。。。?您当然可以将内容发送到列表,但将所有内容保存在数据结构(数据帧和系列)中要快得多,也容易得多。
d['col1']
本质上是第一列中所有值的列表。这只是一个超级快速的列表,上面有额外的计算方法。谢谢,我现在明白你说的了。