簡體   English   中英

從excel讀取並將數據轉換為python中的字典

[英]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.readercsv.reader(f, quoting=csv.QUOTE_NONNUMERIC)如果你不介意你的鑰匙是浮動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM