[英]reading from excel and converting the data to dictionary in python
我在excel中有一些數據,這些數據代表有關圖形的信息,看起來像這樣:
1 2 4.5
1 3 6.6
2 4 7.3
3 4 5.1
每行的前兩個元素是圖形的邊緣,最后一個元素是這兩個邊緣之間的弧的權重。 例如,邊“ 1”連接到邊“ 2”,權重為4.5
我通過以下代碼將此數據導入python:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
training_data_x = pd.read_excel("/Users/mac/Downloads/navid.xlsx",header=None)
x= training_data_x.as_matrix()
所以這里的“ x”是圖的鄰接矩陣。 我想做的是將x轉換為我在另一個代碼中需要的python詞典列表。 我是python的新手,但我認為適合這里的字典看起來像這樣
gr = {'1': {'2': 4.5, '3': 6.6},
'2': {'4': 7.3},
'3': {'4':5.1}}
實際上,“ gr”應該在這里輸出我的代碼。 我想我應該使用“” pandas.DataFrame.to_dict“',但是我很難使用此命令。非常感謝您的幫助。
如果除了pandas.DataFrame.to_dict方法之外,您還希望依靠熊貓出色的groupby / split / combine功能( 請參閱此處 ),您可以執行以下操作:
import pandas as pd
file_path = "/Users/mac/Downloads/navid.xlsx"
gr = pd.read_excel(file_path, header=None, index_col=0) \
.groupby(level=0) \
.apply(lambda x: dict(x.to_records(False))) \
.to_dict()
這適用於0.17以上的所有熊貓版本。
我的建議:將xlsx
文件另存為csv
。 現在,使用香草Python:
import csv
gr = {}
with open('data.csv') as f:
reader = csv.reader(f)
for row in reader:
e1, e2, w = row
gr.setdefault(e1, {})[e2] = float(w)
也許更好,請使用defaultdict
:
import csv
from collections import defaultdict
gr = defaultdict(dict)
with open('data.csv') as f:
reader = csv.reader(f)
for row in reader:
e1, e2, w = row
gr[e1][e2] = float(w)
編輯:請注意,我已經轉換為float
手動,但你也許可以與只是傳遞以下參數脫身csv.reader
: csv.reader(f, quoting=csv.QUOTE_NONNUMERIC)
如果你不介意你的鑰匙是浮動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.