从python中的数据集中解析特定列

Posted

技术标签:

【中文标题】从python中的数据集中解析特定列【英文标题】:Parsing specific columns from a dataset in python 【发布时间】:2014-01-15 04:12:32 【问题描述】:

我有一个包含多列的数据集,我只对分析其中六列的数据感兴趣。它在一个 txt 文件中,我想加载文件并拉出带有标题(时间、模式、事件、xcoord、ycoord、phi)的以下列(0、1、2、4、6、7)。总共有十列,以下是数据的示例:

1385940076332   3   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076336   2   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076339   3   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076342   3   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076346   3   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076350   2   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076353   3   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076356   3   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000

当我使用以下代码将数据解析为列时,它似乎只计算数据 - 但我希望能够列出数据以供进一步分析。这是我从@alko 使用的代码:

import pandas as pd
df = pd.read_csv('filtered.txt', header=None, false_values=None, sep='\s+')[[0, 1, 2, 4, 6, 7]]
df.columns = ['time', 'mode', 'event', 'xcoord', 'ycoord', 'phi']
print df  

这是该代码返回的内容:

class 'pandas.core.frame.DataFrame'
Int64Index: 115534 entries, 0 to 115533
Data columns (total 6 columns): 
time      115534  non-null values
mode      115534  non-null values
event     115534  non-null values
xcoord    115534  non-null values
ycoord    115534  non-null values
phi       115534  non-null values
dtypes: float64(3), int64(2), object(1)

所以目标是从10个原稿中抽出这6个栏目,贴上标签,列出来。

【问题讨论】:

你必须检查分隔符。然后str.split(delimiter). 分隔符是每列之间的一个空格 【参考方案1】:

你可以使用pandas'read_csv解析器:

import pandas as pd
from StringIO import StringIO
s = """1385940076332   3   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076336   2   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076339   3   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076342   3   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076346   3   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076350   2   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076353   3   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.000000    0.000000
1385940076356   3   M   subject_avatar  -30.000000  1.000000    -59.028107  180.000000  0.# 000000    0.000000"""

df = pd.read_csv(StringIO(s),header=None, sep='\s+')[[0, 2, 3, 4, 6, 7]]
df.columns = ['time', 'mode', 'event', 'xcoord', 'ycoord', 'phi']
print df
#             time mode           event  xcoord     ycoord  phi
# 0  1385940076332    M  subject_avatar     -30 -59.028107  180
# 1  1385940076336    M  subject_avatar     -30 -59.028107  180
# 2  1385940076339    M  subject_avatar     -30 -59.028107  180
# 3  1385940076342    M  subject_avatar     -30 -59.028107  180
# 4  1385940076346    M  subject_avatar     -30 -59.028107  180
# 5  1385940076350    M  subject_avatar     -30 -59.028107  180
# 6  1385940076353    M  subject_avatar     -30 -59.028107  180
# 7  1385940076356    M  subject_avatar     -30 -59.028107  180

请注意,我更正了列索引,因为您在问题中提供的索引似乎不正确。

【讨论】:

谢谢,成功了!如何将这段代码应用于我的整个数据集,而不仅仅是我复制和粘贴的那一段? @Julia 您应该能够提供'/Users/Lab/Desktop/vr.txt' 而不是StringIO 对象。如果存在,不要忘记处理标题并在需要时跳过行。我更新了指向 read_csv 文档的链接,您可以在那里找到详细信息。 谢谢,我认为这会奏效,除了我的数据集不统一,有少于 10 列的行散布在各处,理想情况下,我想将这些行之前的数据与即将到来的数据区分开来后。我将提出一个单独的问题来解决这个问题。感谢您的帮助! 我编辑了我的原始问题,询问我现在如何查看数据,因为它被分成了 6 个不同的列。我曾尝试使用“打印 df.values”,但这并没有给出完整的数据。 @Julia,不客气!对于您的第二个问题,您的数据框已加载但太大而无法打印,这就是仅打印信息的原因。咨询例如***.com/a/15006495/1265154

以上是关于从python中的数据集中解析特定列的主要内容,如果未能解决你的问题,请参考以下文章

Python - 如何将时间序列存储到数据集中

从具有特定日期范围的 SAS 数据集中删除行

如何从填充的数据集中提取单列数据?

在 R 中为数据集中的特定列循环线性回归

从大型数据集中采样

R:从R中的大型数据集中根据列中的值删除行[重复]