我有一本如下所示的字典:
date_pair_dict = {
"15-02-2022 15-02-2022": ["key 1 val 1", "key 1 val 2", "key 1 val 3"],
"15-02-2022 16-02-2022": ["key 2 val 1", "key 2 val 2", "key 2 val 3"],
"16-02-2022 16-02-2022": ["key 3 val 1", "key 3 val 2", "key 3 val 3"],
"16-02-2022 17-02-2022": ["key 4 val 1", "key 4 val 2", "key 4 val 3"]
}
以及標題串列:
headers = ["date pair header", "header val 1", "header val 2", "header val 3"]
我想創建一個pandas.DataFrame并將其寫入 Excel,其中的格式將是以下預期輸出:
| 日期對標頭 | 標頭 val 1 | 標頭 val 2 | 標頭 val 3 |
|---|---|---|---|
| 15-02-2022 15-02-2022 | 鍵 1 值 1 | 鍵 1 值 2 | 鍵 1 值 3 |
| 15-02-2022 16-02-2022 | 鍵 2 值 1 | 鍵 2 值 2 | 關鍵 2 價值 3 |
| 16-02-2022 16-02-2022 | 鍵 3 值 1 | 關鍵 3 價值 2 | 關鍵 3 價值 3 |
| 2022 年 2 月 16 日 2022 年 2 月 17 日 | 鍵 4 值 1 | 鍵 4 值 2 | 關鍵 4 價值 3 |
現在,我正在使用這種(可以說是非常悲傷的)方法:
import pandas
date_pair_dict = {
"15-02-2022 15-02-2022": ["key 1 val 1", "key 1 val 2", "key 1 val 3"],
"15-02-2022 16-02-2022": ["key 2 val 1", "key 2 val 2", "key 2 val 3"],
"16-02-2022 16-02-2022": ["key 3 val 1", "key 3 val 2", "key 3 val 3"],
"16-02-2022 17-02-2022": ["key 4 val 1", "key 4 val 2", "key 4 val 3"]
}
headers = ["date pair header", "header val 1", "header val 2", "header val 3"]
list_of_keys, list_of_val_1, list_of_val_2, list_of_val_3 = [], [], [], []
for key in date_pair_dict.keys():
list_of_keys.append(key)
val_1, val_2, val_3 = date_pair_dict.get(key)
list_of_val_1.append(val_1)
list_of_val_2.append(val_2)
list_of_val_3.append(val_3)
dataframe = pandas.DataFrame(
{
headers[0]: list_of_keys,
headers[1]: list_of_val_1,
headers[2]: list_of_val_2,
headers[3]: list_of_val_3,
}
)
這是不可擴展的。實際上,這date_pair_dict可以有任意數量的鍵,每個鍵對應于任意長度的串列。然而,這些串列的長度將始終保持不變,并且會事先知道(我將始終預定義headers串列)。
此外,由于我執行以下操作,我認為這可能會導致我的資料幀與原始密鑰的順序不同:
for key in dictionary.keys():
....
鍵是日期對,在用作資料框的第一列時需要保持順序。
有沒有更好的方法來做到這一點,最好使用字典理解?
uj5u.com熱心網友回復:
就像您說的那樣,您可以對 dict 鍵/值對使用理解:
import pandas as pd
date_pair_dict = {
"15-02-2022 15-02-2022": ["key 1 val 1", "key 1 val 2", "key 1 val 3"],
"15-02-2022 16-02-2022": ["key 2 val 1", "key 2 val 2", "key 2 val 3"],
"16-02-2022 16-02-2022": ["key 3 val 1", "key 3 val 2", "key 3 val 3"],
"16-02-2022 17-02-2022": ["key 4 val 1", "key 4 val 2", "key 4 val 3"]
}
headers = ["date pair header", "header val 1", "header val 2", "header val 3"]
df = pd.DataFrame([[k] v for k,v in date_pair_dict.items()], columns=headers)
print(df)
輸出:
date pair header header val 1 header val 2 header val 3
0 15-02-2022 15-02-2022 key 1 val 1 key 1 val 2 key 1 val 3
1 15-02-2022 16-02-2022 key 2 val 1 key 2 val 2 key 2 val 3
2 16-02-2022 16-02-2022 key 3 val 1 key 3 val 2 key 3 val 3
3 16-02-2022 17-02-2022 key 4 val 1 key 4 val 2 key 4 val 3
uj5u.com熱心網友回復:
IIUC,您可以簡單地執行以下操作:
df = pd.DataFrame.from_dict(date_pair_dict, orient='index').reset_index()
df.columns = headers
在嘗試提出自己的建構式之前,利用現有方法總是一個好主意。
uj5u.com熱心網友回復:
使用串列推導從輸入字典中創建行串列,之后就很簡單了:
import pandas as pd
date_pair_dict = {
"15-02-2022 15-02-2022": ["key 1 val 1", "key 1 val 2", "key 1 val 3"],
"15-02-2022 16-02-2022": ["key 2 val 1", "key 2 val 2", "key 2 val 3"],
"16-02-2022 16-02-2022": ["key 3 val 1", "key 3 val 2", "key 3 val 3"],
"16-02-2022 17-02-2022": ["key 4 val 1", "key 4 val 2", "key 4 val 3"]
}
headers = ["date pair header", "header val 1", "header val 2", "header val 3"]
date_pairs = [[k] v for k, v in date_pair_dict.items()]
df = pd.DataFrame(date_pairs)
df.columns = headers
print(df)
# date pair header header val 1 header val 2 header val 3
# 0 15-02-2022 15-02-2022 key 1 val 1 key 1 val 2 key 1 val 3
# 1 15-02-2022 16-02-2022 key 2 val 1 key 2 val 2 key 2 val 3
# 2 16-02-2022 16-02-2022 key 3 val 1 key 3 val 2 key 3 val 3
# 3 16-02-2022 17-02-2022 key 4 val 1 key 4 val 2 key 4 val 3
uj5u.com熱心網友回復:
一些花哨rename的方法:
>>> pandas.DataFrame([[key,*values] for key,values in date_pair_dict.items()]).rename(columns=headers.__getitem__))
date pair header header val 1 header val 2 header val 3
0 15-02-2022 15-02-2022 key 1 val 1 key 1 val 2 key 1 val 3
1 15-02-2022 16-02-2022 key 2 val 1 key 2 val 2 key 2 val 3
2 16-02-2022 16-02-2022 key 3 val 1 key 3 val 2 key 3 val 3
3 16-02-2022 17-02-2022 key 4 val 1 key 4 val 2 key 4 val 3
uj5u.com熱心網友回復:
您可以使用串列遍歷來構造輸出字典:
import pandas
date_pair_dict = {
"15-02-2022 15-02-2022": ["key 1 val 1", "key 1 val 2", "key 1 val 3"],
"15-02-2022 16-02-2022": ["key 2 val 1", "key 2 val 2", "key 2 val 3"],
"16-02-2022 16-02-2022": ["key 3 val 1", "key 3 val 2", "key 3 val 3"],
"16-02-2022 17-02-2022": ["key 4 val 1", "key 4 val 2", "key 4 val 3"]
}
headers = ["date pair header", "header val 1", "header val 2", "header val 3"]
e = [[k] v for k,v in date_pair_dict.items()]
d = {}
for i in range(len(e[0])):
d[headers[i]] = [a[i] for a in e]
d = pandas.DataFrame(d)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/497558.html
上一篇:為什么這太慢了?
