[英]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.