【问题标题】:How to upload a .txt file in python dataframe如何在 python 数据框中上传 .txt 文件
【发布时间】:2020-10-25 05:54:20
【问题描述】:

我正在尝试上传一个包含如下数据的 txt 文件。我在文件中有大约 1M 条记录。 数据由不同的字段(将是 columns )组成,我在其中手动添加了一个逗号作为分隔符。 挑战在于所有记录都不具有相同的字段集。 列应该是 "Time" , "ENTER" , "TRANSID" , "SUPERCODE" ,"ID", "MRP","VOLUME","VALUE","PRODUCTtype","BUILDING","TAXNUM", "TAGFIELDS" "

00:00:00.000:, ENTER, transId=1, Supercode=BD3G, id=1, MRP=0.12s9, 体积=110333,价值=20942463.27,产品类型=se IA CF,建筑=11430, taxnumber=110F1, tagFields={B=C C=NZd3/1 D="20170514 07:41:53.616" F=:00000017PouM H=LMT O=6521B841:00023662-A-15.1sd01.200.0.50dsd03.0.0 R="未添加订单" a=A c=FIRST3eNZA j=N}

00:00:00.000:, ENTER,transId=2,Supercode=BYG, id=2, MRP=0.195, 体积=223000,价值=43485,> 产品类型=se IA CF,建筑=110, taxnumber=110I1, tagFields={B=C> C=NZ3 D="20170514 07:41:25.161" F=:00000017PouK H=LMT> O=6521B841:00023625-A-15.101.200.0.5003.0.0 R="未添加顺序" a=A> c=FIRSTNZA j=N}

#对于这条记录,没有taxnumber,所以这条记录的TAXnumber列字段应该是空白/Nan 00:00:00.000:, ENTER, transId=3, Supercode=TBC, id=3,MRP=2.71, 体积=3750,值=10162.5,产品类型=它 CF UeCP,> 建筑物=110, tagFields={B=C C=4331K D="20170514 > 13:59:51.288" H=LMT K=12345O=6521B841:0027d59B6-B-15.101.200.0.5009.0.0 R="订单 未添加" a=P c=4sd33E> j=N}

#对于这条记录,没有楼号,所以这条记录的楼号栏字段应该为空/Nan

00:00:00.000:, ENTER, transId=4, Supercode=ABT, id=4, MRP=2.73,> 体积=357,价值=974.61,产品类型=se IrA CtF, taxnumber=110B1, tagFields={B=C C=ZBJF D="20170929 16:10:01.321" H=LT O=6521B5841:003A98565-A-15.101.2050.0.5009.0.0 R="未添加订单" a=A c=BNPLLCOLO j=Y}

我已经尝试了以下步骤:

data = pd.read_csv("path.txt",delimiter=",",header=None)

我得到了输出

ParserError:标记数据时出错。 C 错误:预期有 10 个字段 第 66017 行,锯 11

【问题讨论】:

    标签: python pandas dataframe text python-import


    【解决方案1】:

    尝试在您的 pd.read_csv() 中使用 engine='python'error_bad_lines=False

    【讨论】:

      【解决方案2】:

      这是一个将数据文件转换为 csv 文件的小脚本:

      import csv
      
      columns =  "TIME ENTER TRANSID SUPERCODE ID MRP VOLUME VALUE PRODUCTYPE BUILDING TAXNUMBER TAGFIELDS".split()
      
      with open("path.txt") as source, open("path.csv", "w") as sink: 
          writer = csv.DictWriter(sink, fieldnames=columns, restval='')
          writer.writeheader()
      
          for line in source:
              time, enter, *tail = line.split(',')
              key_value_pairs = (item.strip().split('=', maxsplit=1) for item in tail)
              d = {'TIME':time, 'ENTER':enter.strip()}
              d.update((key.upper(),value) for key, value in key_value_pairs)
      
              writer.writerow(d)
      

      然后您可以使用:

      df = pandas.read_csv("path.csv")
      

      加载数据。

      【讨论】:

      • 嗨@RootTwo - 我试过这个,但我得到如下错误 UnsupportedOperation: not writable
      • @vishnu,对不起,open("path.csv") was missing the mode "w"`。固定。
      • 嗨@RootTwo,谢谢,但很抱歉,它不起作用,按原样运行上述命令后,整个数据已从文件中删除并替换为带有列标题的单行。
      猜你喜欢
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2022-10-07
      • 2020-03-28
      • 2020-04-01
      • 1970-01-01
      • 2013-03-01
      • 2018-11-12
      相关资源
      最近更新 更多