簡體   English   中英

如何使用pandas讀取csv - 行格式

[英]How to read csv with pandas - line format

我有如下所示的日志文件:

Datetime;Identifier;Description;Value;Unit 
2020-06-18 00:02:55;var1;Gasflow meting 1;7.494;L/min 
2020-06-18 00:02:55;var2;Dauwpunt meting 1;-53.119;grC  
2020-06-18 00:08:55;var1;Gasflow meting 1;7.494;L/min  
2020-06-18 00:08:55;var2;Dauwpunt meting 1;-53.119;grC

這基本上是一種行(或行)格式,而不是每個變量獲得一列,每一行都包含一個不同的變量。

我想用 Pandas 將其讀入面向列的格式。 df 最終應該是這樣的:

Datetime;[identifier1_description1_unit1];[identifier2_description2_unit2];etc

其中列的名稱 a 是將標識符、描述和單位鏈接在一起。

使用上面的示例,這將是:

Datetime;[var1_Gasflow meting 1_L/min];[var2_Dauwpunt meting 1_grC]
2020-06-18 00:02:55;7.494;-53.119
2020-06-18 00:08:55;7.494;-53.119

當然,日志文件和列表要長得多,而且不知道標識符、描述、值或單位的確切名稱。

df = pd.read_csv('filename', sep=';')

這將使用文件中的數據創建一個數據框; 作為分隔符。

我遇到了我認為最簡單的解決方案。 我不熟悉熊貓的樞軸函數,它完成了整個技巧:

df =  pd.read_csv('data.csv', sep=';')
df['label'] = df['Identifier'] + "_" + df['Description'] + "_" + df['Unit']
df.drop(['Identifier','Description','Unit'],inplace=True)
df2 = df.pivot(index='Datetime', columns='label', values='value')

這不是很pythonic

df =  pd.read_csv('~/projects/data.txt', sep=';')

產量

    Datetime            Identifier  Description     Value   Unit
0   2020-06-18 00:02:55 var1    Gasflow meting 1    7.494   L/min
1   2020-06-18 00:02:55 var2    Dauwpunt meting 1   -53.119 grC

然后做標簽

df['label'] = df['Identifier'] + "_" + df['Description'] + "_" + df['Unit']

得到這個

    Datetime            Identifier  Description     Value   Unit    label
0   2020-06-18 00:02:55 var1    Gasflow meting 1    7.494   L/min   var1_Gasflow meting 1_L/min
1   2020-06-18 00:02:55 var2    Dauwpunt meting 1   -53.119 grC var2_Dauwpunt meting 1_grC

現在有點不是很pythonic,你必須按照你喜歡的方式放置格式

for name, df1 in df.groupby('Datetime'):
    df2 = df1[['label','Value']]
    print (name)
    print (df2['label'].to_list())
    print (df2['Value'].to_list())


2020-06-18 00:02:55
['var1_Gasflow meting 1_L/min', 'var2_Dauwpunt meting 1_grC']
[7.494, -53.119]

這是一個建議( file_name是文件的路徑/名稱):

df = pd.read_csv(file_name, delimiter=';', header=0, index_col=0)

col_group = ['Identifier', 'Description', 'Unit']
df = pd.concat([group.drop(columns=col_group)
                     .rename(columns={'Value': f"[{'_'.join(keys)}]"})
                for keys, group in df.groupby(by=col_group)],
               axis='columns')

結果:

                     [var1_Gasflow meting 1_L/min]  [var2_Dauwpunt meting 1_grC]
Datetime                                                                        
2020-06-18 00:02:55                          7.494                       -53.119
2020-06-18 00:08:55                          7.494                       -53.119

如果Datetime不是索引,您必須稍微調整一下(或將其設置為索引)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM