假設我有一個包含 2 行的 Excel 表:
0.296178 0.434362 0.033033 0.758968
0.559323 0.455792 0.780323 0.770423
我怎么能用字典將每一行的值從高到低排列?
例如,第 1 行的字典輸入應如下所示:{1:[4,2,1,3]}因為第 1 行中的第 4 個值最高,第 1 行中的第 3 個值最低。
(由于它是 Excel 檔案,因此不會從 0 開始索引)
uj5u.com熱心網友回復:
為此,首先,您需要一個模塊來匯入 excel 檔案。我推薦大熊貓,因為它被廣泛使用。(如果還沒有,請使用“pip install pandas”安裝它)
之后使用此代碼:
import pandas as pd
path = r'C:\Users\tanuj\Desktop\temp.xlsx' # replace it with your file path
df = pd.read_excel(path, header = None)
df.head() # to visualise the file
#And then, use this simple logic to get the required dictionary
d = {}
for x in range(df.shape[0]):
temp = {}
values = list(df.iloc[x])
for y in range(len(values)):
temp[df.loc[x][y]] = y 1
l = []
for t in sorted(temp):
l.append(temp[t])
l.reverse()
d[x 1] = l
print(d)
uj5u.com熱心網友回復:
numpy 中的argsort函式可以解決問題。考慮這個代碼:
import numpy as np
import pandas as pd
df = pd.read_csv('excel.csv', delimiter=',', header=None)
i = 0
dict = {}
for row in df.values:
arg = np.argsort(row)
iarg = list(map(lambda x: x 1, arg))
iarg.reverse()
dict[i]=iarg
i = i 1
print(dict)
它以 csv 格式讀取輸入資料,并為您提供所需的輸出。
uj5u.com熱心網友回復:
閱讀完您的問題后,我認為您想從 Excel 作業表中讀取行值并將其存盤在字典中,然后希望將字典中的值從高到低排序...
所以首先你必須閱讀存盤你可以使用的值的excel檔案
openpyxl module
from openpyxl import load_workbook
wb = load_workbook("values.xlsx")
ws = wb['Sheet1']
for row in ws.iter_rows():
print([cell.value for cell in row])
上面的代碼將生成excel檔案中的值串列
在你的情況下:
[0.296178, 0.434362, 0.033033, 0.758968]
[0.559323, 0.455792, 0.780323, 0.770423]
現在您必須將其存盤在字典中,然后對其進行排序...
from openpyxl import load_workbook
wb = load_workbook("values.xlsx")
ws = wb['Sheet1']
value_dict={}
n=1
#extracting value from excel
for row in ws.iter_rows():
values=[cell.value for cell in row]
value_dict[n]=values
n=n 1
print(value_dict)
#Sorting Values
for keys,values in value_dict.items():
values.sort(reverse=True)
print("Row " str(keys),values)
上面的代碼執行與您要執行的任務相同的任務...
輸出影像
uj5u.com熱心網友回復:
對于 df 中的每一行,您可以將每個元素與該行的排序版本進行比較并獲取索引。
import pandas as pd
a = [0.296178, 0.434362, 0.033033, 0.758968]
b = [0.559323, 0.455792, 0.780323, 0.770423]
df = pd.DataFrame(columns = ['1', '2'], data = zip(a, b)).T
def compare_sort(x):
x = list(x)
y = sorted(x.copy())[::-1]
return([x.index(y[count]) 1 for count, _ in enumerate(y) ])
print(df.apply(compare_sort, axis=1)) # apply func. to each row of df
1 [4, 2, 1, 3]
2 [3, 4, 1, 2]
# Get data by row name
df = df.apply(compare_sort, axis=1)
print(df['1'])
[4, 2, 1, 3]
有用的鏈接。
獲取專案索引
反向串列
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/401162.html
上一篇:為什么我的Python程式的可執行版本沒有正確執行os.listdir和os.path.isdir?作業系統是Windows10
