从csv文件中选择Dataframe列名

时间:2017-08-17 19:51:29

标签: python csv dataframe

我有一个.csv来读入DataFrame,列的名称在previos行中的.csv文件中。通常我会放弃所有不必要的'用于创建DataFrame的行,然后对每个数据帧的名称进行硬编码

Trigger time,2017-07-31,10:45:38
CH,Signal name,Input,Range,Filter,Span
CH1, "Tin_MIX_Air",TEMP,PT,Off,2000.000000,-200.000000,degC
CH2, "Tout_Fan2b",TEMP,PT,Off,2000.000000,-200.000000,degC
CH3, "Tout_Fan2a",TEMP,PT,Off,2000.000000,-200.000000,degC
CH4, "Tout_Fan1a",TEMP,PT,Off,2000.000000,-200.000000,degC

在这里,您可以看到列名称在双引号中的行" TinMix"," Tout .."等等,正好有16行名称

Logic/Pulse,Off
Data
Number,Date&Time,ms,CH1,CH2,CH3,CH4,CH5,CH7,CH8,CH9,CH10,CH11,CH12,CH13,CH14,CH15,CH16,CH20,Alarm1-10,Alarm11-20,AlarmOut
NO.,Time,ms,degC,degC,degC,degC,degC,degC,%RH,%RH,degC,degC,degC,degC,degC,Pa,Pa,A,A1234567890,A1234567890,A1234
1,2017-07-31 10:45:38,000,+25.6,+26.2,+26.1,+26.0,+26.3,+25.7,+43.70,+37.22,+25.6,+25.3,+25.1,+25.3,+25.3,+0.25,+0.15,+0.00,LLLLLLLLLL,LLLLLLLLLL,LLLL

这里每个变量的值都会开始。

我需要做的是从.csv创建一个Dataframe,并将这些名称放在列名中。我是Python的新手,我不太清楚如何做到这一点

import pandas as pd
path = r'path-to-file.csv'
data=pd.DataFrame()
with open(path, 'r') as f:
    for line in f:
        data = pd.concat([data, pd.DataFrame([tuple(line.strip().split(','))])], ignore_index=True)
data.drop(data.index[range(0,29)],inplace=True)
x=len(data.iloc[0])
data.drop(data.columns[[0,1,2,x-1,x-2,x-3]],axis=1,inplace=True)
data.reset_index(drop=True,inplace=True)
data = data.T.reset_index(drop=True).T
data = data.apply(pd.to_numeric)

到目前为止,我已经完成了使用有用数据获取数据框的内容,我删除了对我没用的所有其他列,只保留了值。最后三行是重置行/列索引并将整个df转换为浮点数。我想要的是用我在第一段编码中显示的每个名称命名列,就像我之前所说的那样,我手动执行此操作:

data.columns = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p']

但我希望从.csv文件中获取它们,因为有可能更改CH# - "名称"组合

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

  

评论:可以在另一个内部工作" OPEN"我有循环吗?

假设第2行的列名称为6,第7行的数据为EOF 例如(未经测试的代码)

data = None
columns = []

with open (path) as fh:
   for row, line in enumerate (fh, 1):
       if row > 2 and row <= 6:
            ch, name = line.split(',')[:2]
            columns.append(name)
        else:
            row_data = [tuple(line.strip().split(','))]
            if not data:
                data = pd.DataFrame(row_data, columns=columns, ignore_index=True)
            else:
                data.append(row_data)
  

问题:...我想从.csv文件中获取它们

开始于:

with open (path) as fh:
   for row, line in enumerate (fh, 1):
       if row > 2:
            ch, name = line.split(',')[:2]