【发布时间】:2018-01-26 09:18:28
【问题描述】:
我有一个要读入 DataFrame 的 .csv 文件,并且列的名称在 previos 行的同一个 .csv 文件中。通常我会删除所有“不必要的”行来创建 DataFrame,然后硬编码每个 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 创建一个数据框,并将这些名称放在列名称中。我是 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# -“名称”组合
非常感谢您的帮助!
【问题讨论】: