在csv的列上设置索引和读取多索引

时间:2018-03-06 20:10:52

标签: python pandas csv multi-index

我的.csv看起来像是:

SiteCode,('Max_Area',1), ('Max_Vol',1)
0003L,3037.1875,13390.319488525391
0009L,7719.25,476.31626510620117

第一列是所需的索引,后面的元组是我想要的列名。当我读取csv之类的时候:

df = pd.read_csv("file.csv",index_col=0)

我得到的数据框如下:

          (Max_Area            1)   (Max_Vol         1)
SiteCode                                                                
0003L     3037.1875  13390.319489  NaN  NaN       
0009L     7719.2500    476.316265  NaN  NaN

我想要一个看起来像这样的数据框:

SiteCode  (Max_Area,1)   (Max_Vol,1)                       
0003L     3037.1875  13390.319489    
0009L     7719.2500    476.316265  

是否可以读取以逗号分隔的元组作为标题的csv?

2 个答案:

答案 0 :(得分:0)

您可以阅读第一行,提取列名并将此信息提供给csv阅读器:

import pandas as pd
import re

with open("test.txt", "r") as f:
    header = f.readline()[:-1]

pattern = re.compile(r"(?:[^,(]|\([^)]*\))+")
df = pd.read_csv("test.txt", names = pattern.findall(header), skiprows = 1)
#output
  SiteCode  ('Max_Area',1)  ('Max_Vol',1)
0    0003L       3037.1875   13390.319489
1    0009L       7719.2500     476.316265

答案 1 :(得分:0)

您可以显式传入要使用的列名,并跳过标题行:

df = pd.read_csv("file.csv", 
                 names=['SiteCode', '(Max_Area, 1)', '(Max_Vol, 1)'],
                 skiprows=1, 
                 index_col=0)

df

          (Max_Area,1)   (Max_Vol,1)
SiteCode                         
0003L     3037.1875      13390.319489    
0009L     7719.2500        476.316265