2014-09-10 51 views
1

我正在使用Numpy而不是Matlab,但我相對較新的Python。組織列和頭數據與熊貓,python

我目前的挑戰是以合理的方式將數據導入到多個文件中,以便我可以使用並繪製它。數據以columnes(溫度,壓力,時間等等,每個文件都是一個測量期)組織,我決定熊貓可能是導入數據的最佳方式。我正在考慮爲每個文件使用頂級描述符,每個列使用子描述符。想到做這樣的事情。 Reading Multiple CSV Files into Python Pandas Dataframe

問題是我想保留並使用頭中的一些數據(例如繪圖)。有沒有列標題,但數據mesaurements一般信息,像這樣:

Flight ID: XXXXXX 
Date: 01-27-10 Time: 5:25:19 
OWNER 
Release Point: xx.304N xx.060E 11 m 
Serial Number xxxxxx 
Surface Data: 985.1 mb 1.0 C 100% 1.0 m/s @ 308 deg. 

我真的不知道如何提取和存儲數據的方式在與數據幀合併是有道理的。想到也許是字典,但我不知道如何有效地分割數據,因爲沒有一致的分隔符。有任何想法嗎?

+2

您是否要求解析您的標題並將其用作列名?這是有點不清楚你想要什麼,你能再解釋一下嗎? – EdChum 2014-09-10 13:17:15

+0

我並不感到驚訝,這是一個非常開放的問題,因爲我對於一個好的解決方案沒有具體的想法。我不希望它作爲標題,我已經有了。我不一定需要它作爲數據框的一部分,但我真的不明白我會如何以合理的方式來組織它。只要我可以在需要在情節中使用它時獲得信息,或者獲得關於數據框中的數據的更多細節,我就可以像字典一樣尋找信息,但是我不確定如何提取信息。 – user2207834 2014-09-24 15:38:48

+0

你可以將它添加到一個df作爲屬性:'df.flight_ID ='XXXXXX''等。但是,如果df被複制,屬性**不**複製,所以你需要小心 – EdChum 2014-09-24 15:41:40

回答

1

看起來像有人正在用無線電探空儀...

當我拉我的探空資料,我通常把它放在一個多級索引數據幀。級別可以是各種形式和順序,但像FLIGHT_NUM,DATE,ALTITUDE等等是有意義的。另外,在使用探測器數據時,我也希望獲得一些額外的信息,這些信息不一定需要存儲在數據框中,因此我將其存儲爲其他屬性。如果我要解析的文件,然後保存它,我會做沿着此線的東西(是的,有可製成「改進」這一修改):

import pandas as pd 

with open("filename.csv",'r') as data: 
    header = data.read().split('\n')[:5] # change to match number of your header rows 
    data = pd.read_csv(data, skiprows=6, skipinitialspace=True, na_values=[-999,'Infinity','-Infinity']) 

# now you can parse your header to get out the necessary information 
# continue until you have all the header info you want/need; e.g. 
flight = header[0].split(': ')[1] 
date = header[1].split(': ')[1].split('')[0] 
time = header[1].split(': ')[2] 

# a lot of the header information will get stored as metadata for me. 
# most likely you want more than flight number and date in your metadata, but you get the point. 
data.metadata = {'flight':flight, 
       'date':date} 

我相信你有個約會/ time列(在此稱爲「日期」),以便您可以使用它重新爲您的數據框編制索引。如果您選擇在多級索引中使用不同的變量,則應用相同的方法。

new_index = [(data.metadata['flight'],r) for r in data.dates] 
data.index = pd.MultiIndex.from_tuples(new_index) 

您現在有一個多級索引數據框。

現在,關於你的「元數據」。 EdChum提供了一個很好的觀點,如果您複製「數據」,則不會複製元數據字典。另外,如果通過data.to_pickle將「數據」保存到數據框中,則會丟失元數據(稍後會詳細介紹)。如果你想保留你的元數據,你有幾個選項。

  1. 將航班信息保存在每個航班的基礎上。這將允許您爲每個單個航班的文件存儲元數據。

  2. 假設您希望在一個保存的文件中有多個航班:您可以在數據框中添加一個額外的列以保存該信息(即另一列爲航班號,另一列爲表面溫度等)會增加保存的文件的大小。

  3. 假設您想要在一個保存的文件(選項2)內有多個航班:您可以使用航班號「鍵入」元數據字典。例如

    數據。元數據= {FLIGHT1:{ '日期':日期}, 機票網:{ '日期':日期}}

現在存儲的元數據。檢查你的我的IO類存儲額外的屬性在一個H5文件發佈here

你的問題相當寬泛,所以你有一個廣泛的答案。我希望這可以幫到你。