【问题标题】:Read multine header into dictionary and data into DataFrame将multine header读入字典,将数据读入DataFrame
【发布时间】:2018-07-13 08:22:54
【问题描述】:

我有一个 *.txt 而以下配置:一个长标题和前面的数据。见下文

field1, field2, field3
field4, field5, field 6, field7, field8
field9, fiel10
field11, field12

1, 1.1, 1o.1
2, 0.5, 15
3, 0, 8.3
4, 2.1, 7.8
.. 
..

这是我编写的代码。为了从标题中保存值,我创建了一个名为“标题”的字典。

header={}
count=1
with open('file.txt') as f:
   while count<4:
      line = f.readline()
      if count==1:
         header['field1]=line.split(',')[0]
         header['field2]=line.split(',')[1]          
         header['field3]=line.split(',')[2]
      if count==2:
         header['field4]=line.split(',')[0]
         header['field5]=line.split(',')[1]          
         header['field6]=line.split(',')[2]
         header['field7]=line.split(',')[3]          
         header['field8]=line.split(',')[4]
      if count==3:
         header['field9]=line.split(',')[0]
         header['field10]=line.split(',')[1]          
      if count==4:
         header['field11]=line.split(',')[0]
         header['field12]=line.split(',')[1]          

#Read the full data into dataframe
df=  pd.read_csv('file.txt',skiprows=4,names=['Col1','Col2','Col3])

但是,我认为这不是非常有效或优雅的方式。我会很欣赏单独使用 I/O 文件指针或 Pandas 的更简单的版本。谢谢

【问题讨论】:

    标签: python list pandas dictionary readline


    【解决方案1】:

    遍历标题行,拆分它们,然后遍历行 enries:

    header = {}
    with open('file.txt') as fobj:
        counter = 1
        for line in fobj:
            # assuming empty line between multi-line header and data
            if not line.strip():
                break
            for entry in line.split(','):
                header['field{}'.format(counter)] = entry.strip()
                counter += 1
    
    import pprint    
    pprint.pprint(header)
    

    输出:

    {'field1': 'field1',
     'field10': 'fiel10',
     'field11': 'field11',
     'field12': 'field12',
     'field2': 'field2',
     'field3': 'field3',
     'field4': 'field4',
     'field5': 'field5',
     'field6': 'field 6',
     'field7': 'field7',
     'field8': 'field8',
     'field9': 'field9'}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      相关资源
      最近更新 更多