我在加載一個簡單的 .csv 檔案時遇到問題pd.read_csv()。問題是分組多個“列”的最后一個標題。
.csv 看起來像這樣:
機器;程序; 日期; 統計; 資料_A系列
;P22; 2015 年 8 月 12 日;X ; 0; 0,5; 1個;2;4;6個
; P22; 2015 年 8 月 12 日;是;12; 15; 25; 33; 23
一個; PX67; 09.12.2015; X ; 0; 0,3; 2;3;7; 8個;8,5; 9,5
安;PX67;09.12.2015; 是;22; 45; 35; 48; 55; 60; 62; 58
第五列如下所示:
Data_Series
0;0,5; 1個;2;4;6
12;15; 25; 33; 23
0; 0,3; 2;3;7; 8個;8,5; 9,5
22; 45; 35; 48; 55; 60; 62; 58
預期結果應該是具有 5 列的 DataFrame
(其中 Statistic 列被旋轉 [X, Y] 以包含 Data_Series 值)。
csv 檔案和預期結果:

知道如何解決這個問題嗎?謝謝
uj5u.com熱心網友回復:
使用csv.reader和熊貓pivot explode
text = """Machine;Process;Date;Statistic;Data_Series
A;P22;08.12.2015;X;0;0,5;1;2;4;6
A;P22;08.12.2015;Y;12;15;25;33;23;45
A;PX67;09.12.2015;X;0;0,3;2;3;7;8;8,5;9,5
A;PX67;09.12.2015;Y;22;45;35;48;55;60;62;58"""
import csv
headers = None
data = []
reader = csv.reader(text.splitlines(), delimiter=';', quotechar='"')
for row in reader:
if headers is None:
headers = row
continue
std_columns = row[:len(headers) - 1]
series = [float(x.replace(",", ".")) for x in row[len(headers):]]
data.append([*std_columns, series])
df = pd.DataFrame(data, columns=headers)
df = df.pivot(index=["Machine", "Process", "Date"], columns="Statistic", values="Data_Series")
df = df.explode(["X", "Y"]).reset_index()
uj5u.com熱心網友回復:
import pandas as pd
df_list = []
with open('data_in.csv', 'r') as f:
headers = False
for line in f:
if not headers:
headers = line.strip().split('; ')
continue
# Machine; Process; Date; Statistic; Data_Series -> 5 columnss -> split 4 times
unparsed = line.strip().split('; ', len(headers)-1)
# split the last column
parsed = [float(val.replace(',', '.')) for val in unparsed[-1].split('; ')]
# add data to list after removeing any spaces on "Statistic"
df_list.append(unparsed[:-2] [unparsed[-2].strip()] [parsed])
df = pd.DataFrame(df_list, columns=headers)
# pivot > explode > reset_index
df_new = df.pivot(index=["Machine", "Process", "Date"], columns="Statistic", values="Data_Series").explode(list('XY')).reset_index()
# remove columns names
df_new.columns.name = None
| 機器 | 程序 | 日期 | X | 是 |
|---|---|---|---|---|
| 一個 | P22 | 08.12.2015 | 0 | 12 |
| 一個 | P22 | 08.12.2015 | 0.5 | 15 |
| 一個 | P22 | 08.12.2015 | 1 | 25 |
| 一個 | P22 | 08.12.2015 | 2 | 33 |
| 一個 | P22 | 08.12.2015 | 4 | 23 |
| 一個 | P22 | 08.12.2015 | 6 | 45 |
| 一個 | PX67 | 09.12.2015 | 0 | 22 |
| 一個 | PX67 | 09.12.2015 | 0.3 | 45 |
| 一個 | PX67 | 09.12.2015 | 2 | 35 |
| 一個 | PX67 | 09.12.2015 | 3 | 48 |
| 一個 | PX67 | 09.12.2015 | 7 | 55 |
| 一個 | PX67 | 09.12.2015 | 8 | 60 |
| 一個 | PX67 | 09.12.2015 | 8.5 | 62 |
| 一個 | PX67 | 09.12.2015 | 9.5 | 58 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489595.html
上一篇:在python中,如何將字典中的字串串列轉換為整數串列?
下一篇:Kotlin如何使用CSV函式
