【问题标题】:How to add column names to pipe delimited file of specific format如何将列名添加到特定格式的管道分隔文件
【发布时间】:2022-11-11 00:10:00
【问题描述】:

我有一个包含用户数据的文件

NS|Mrs|Jane|0001|07061980|random co|AS|001|4034|2/342 PT MMMMMY

我可以这样做来写 colnames ,但是 -

colnames = [name,code,DOB... ]
colnames = [i+'|' for i in colnames]
# then write this header to same txt file

但问题在于文件中的用户段可以随机出现。 该文件具有特定格式,例如 -

  • 在开头出现NS 表示NS 之后的所有列都属于名称段类别。名称段可以是名称、代码、DOB、公司等。
  • AS 的出现表示AS 之后的所有列都属于地址段。比如门牌号、密码、地址等。
  • 段可以随机出现,一些用户可能首先列出AS,其他可能首先列出NS
NS = [ 'title','name','code','DOB','company']
AS = [ 'state_code',house_num','pincode','address']

需要输出作为数据框-

Title|Name|code|DOB|company|state_code|house_num|pincode|address
Mrs  |Jane|0001|07061980|random co|001|4034|2/342 PT MMMMMY
Mr   |John|0001|03061940|random co2|002|4034|2/342 AD MMMTM

任何人都可以帮忙吗?如果需要,我可以提供更多信息

【问题讨论】:

    标签: python pandas string dataframe dictionary


    【解决方案1】:

    我将首先创建一个干净的数据文件。

    with open('myfile.txt') as f_in:
        with open('output.txt', 'w') as f_out:
            #declare output order
            f_out.write('Title|Name|code|DOB|company|state_code|house_num|pincode|address
    ')
            for line in f_in.readlines():
                if line.startswith('NS'): #correct order, just remove tags
                    f_out.write(line.replace('NS|', '').replace('AS|', ''))
                elif line.startswith('AS'): #inverse order, change order
                    peices = line.replace('AS|', '').replace('
    ', '').split('|NS|')
                    f_out.write(peices[1]+'|'+peices[0]+'
    ')
    

    然后将文件读入数据框

    df = pd.read_csv('output.txt', sep='|')
    

    【讨论】:

      猜你喜欢
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      相关资源
      最近更新 更多