解析从文本文件到变量的制表符分隔值

时间:2017-02-27 00:46:28

标签: python csv parsing pandas tab-delimited

您好我一直在努力解决这个问题,我尝试迭代行并从中选择数据,然后将它们分配给变量。这是我第一次使用熊猫,我不知道如何选择数据

reader = pd.read_csv(file_path, sep="\t" ,lineterminator='\r', usecols=[0,1,2,9,10],)

for row in reader:
    print(row)
    #id_number = row[0]
    #name = row[2]
    #ip_address = row[1]
    #latitude = row[9]

这是我想要分配给变量的行的输出:

050000

129.240.228.138

planetlab2.simula.no

59.93

编辑:对于大熊猫而言,这可能不是问题,但对于普通的Python来说。我对python很新,我想要实现的是逐行解析制表符分隔的文件,并将数据分配给变量并在一个循环中打印它们。

这是输入文件样本:

050263  128.2.211.113   planetlab-1.cmcl.cs.cmu.edu NA  US  Allegheny County    Pittsburgh  http://www.cs.cmu.edu/  Carnegie Mellon University  40.4446 -79.9427    unknown
050264  128.2.211.115   planetlab-3.cmcl.cs.cmu.edu NA  US  Allegheny County    Pittsburgh  http://www.cs.cmu.edu/  Carnegie Mellon University  40.4446 -79.9427    unknown

3 个答案:

答案 0 :(得分:0)

您可以使用iterrows()

df = pandas.read_csv(file_path, sep=',')
for index, row in df.iterrows():
    value = row['col_name']

或者,如果您想通过列的索引访问:

df = pandas.read_csv(file_path, sep=',')
for index, row in df.iterrows():
    value = row.ix[0]

答案 1 :(得分:0)

您要描述的一般工作流程是:您想要读取csv,在文件中找到具有特定ID的行,并将该行中的所有值解压缩到变量中。这对熊猫来说很简单。

看起来CSV文件中至少有10列。提供usecols arg应该过滤掉你不感兴趣的列,read_csv在加载到pandas DataFrame对象(你称之为reader)时会忽略它们。

做你想做的事的步骤:

  1. 使用pd.read_csv()读取数据文件。你已经完成了这个,但我建议调用这个变量df而不是reader,因为read_csv返回一个DataFrame对象,而不是Reader对象。您还会发现使用read_csv的names参数将列名称分配给数据帧很方便。看起来您希望names=['id', 'ip_address', 'name', 'latitude','longitude']将这些作为列。 (假设col10是经度,这意味着9,10将是纬度/长对)
  2. 查询具有您感兴趣的ID的行的dataframe对象。有多种方法可以执行此操作。一个是using the query syntax。很难知道为什么你想要那个没有更多细节的特定行,但是你可以在pandas中查找有关索引查找的更多信息。示例:row = df.query("id == 50000")
  3. 给定一行,您希望将行值提取到变量中。如果您已为数据框指定了列名,则这很容易。您可以将该行视为值的字典。例如。 lat = row['lat'] lon = row['long]

答案 2 :(得分:0)

您需要为每行添加相同的值,还是需要处理该值以确定添加的值?如果它是一致的,您可以简单地使用pandas对数据集执行矩阵运算来应用此总和。如果需要逐行处理,上述解决方案肯定是正确的。如果它是必须逐行添加的变量表,则可以通过将它们全部转储到与数据集对齐的列中来执行此操作,使用pandas逐行添加,并简单地打印出完整的数据帧。假设您要添加三列,并将其放入新列[e]。

df [' e'] = df.a + df.b + df.d

或者,如果是常数:

df [' e'] = df.a + df.b + {constant}

然后放下你不需要的栏目(如上所述[' a']和df [' b'])

显然,如果您需要根据每行的唯一值进行计算,请将值放入另一列并按上述总和。