[英]Selectin Dataframe columns name from a csv file
我有一個.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創建一個數據框,並將這些名稱放在列名稱中。 我是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#-“名稱”組合
非常感謝你的幫助!
評論 :它是否可以在我擁有的另一個“ 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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.