在這段代碼中,一些資訊寫入了 csv 檔案。具體來說,我想忽略key字串的任何分隔字符(逗號、空格等)。換句話說,我想在一個 Excel 單元格中查看密鑰。其余的都可以,應該被分隔。
df = pd.read_csv('test.batch.csv')
print(df)
# Creating a dictionary
data = {'Value':[0,0,0]}
kernel_df = pd.DataFrame(data, index=['M1','M2','M3'])
my_dict = {'dummy':kernel_df}
# dummy -> Value
# M1 0
# M2 0
# M3 0
for name, df_group in df.groupby('Name'):
my_dict[name] = pd.concat(
[g.reset_index(drop=True) for _, g in df_group.groupby('ID')['Value']],
axis=1
)
print(my_dict)
with open('output.csv', 'w') as f:
for key in my_dict.keys():
f.write("%s\n"%(key)) <-- This should be written in one cell
df2 = my_dict[key]
df2.to_csv(f)
輸出是
ID Name Metric Value
0 0 K1::foo(bar::z(x,u)) M1 10
1 0 K1::foo(bar::z(x,u)) M2 5
2 0 K1::foo(bar::z(x,u)) M3 10
3 1 K2::foo() M1 20
4 1 K2::foo() M2 10
5 1 K2::foo() M3 15
6 2 K1::foo(bar::z(x,u)) M1 2
7 2 K1::foo(bar::z(x,u)) M2 2
8 2 K1::foo(bar::z(x,u)) M3 2
{'dummy': Value
M1 0
M2 0
M3 0, 'K1::foo(bar::z(x,u))': Value Value
0 10 2
1 5 2
2 10 2, 'K2::foo()': Value
0 20
1 10
2 15}
Excel 中的 CSV 檔案看起來像


如您所見,第 6 行分為兩列。純文本的輸出檔案看起來像
dummy
,Value
M1,0
M2,0
M3,0
K1::foo(bar::z(x,u))
,Value,Value
0,10,2
1,5,2
2,10,2
K2::foo()
,Value
0,20
1,10
2,15
我該如何解決?
uj5u.com熱心網友回復:
您可以使用 csv 模塊來確保密鑰中的特殊字符將被正確參考或轉義。由于您使用默認格式,即逗號分隔符和雙引號作為字串分隔符,您可以使用 csv 模塊的默認值。你的代碼會變成:
import csv
...
with open('output.csv', 'w') as f:
wr = csv.writer(f)
for key in my_dict.keys():
wr.writerow([key]) # ensure proper CSV formatting of the key cell
df2 = my_dict[key]
df2.to_csv(f)
使用您的樣本資料,csv 檔案的內容是:
dummy
,Value
M1,0
M2,0
M3,0
"K1::foo(bar::z(x,u))"
,Value,Value
0,10,2
1,5,2
2,10,2
K2::foo()
,Value
0,20
1,10
2,15
您可以看到 csv writer 正確參考了第二個鍵,因為它包含一個逗號...
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/352888.html
