Хранение нескольких значений в словаре - PullRequest
1 голос
/ 27 февраля 2020

Я новичок в python и сталкиваюсь с трудностями в словаре. Я пытаюсь сохранить несколько значений из Excel в словарь.

Это мой ввод:

enter image description here

И я пытаюсь сохранить таким образом.

Мой ожидаемый вывод:

d = [
{
"name":"dhdn",
"sub":["c","java","python"]
},
{
"name":"subbu",
"sub":["java","perl"]
}
]

Я пытался так:

df_service = pd.read_excel(existing_excel_file, sheet_name='Sheet1')
df_service = df_service.replace(np.nan, "dummy")
print(df_service)

list1 = []

for i in range(0, len(df_service['name'])):
    dict1 = {}
    lst = []
    if df_service['name'][i] != 'dummy':        
        dict1["name"] = df_service['name'][i]
        lst.append(df_service['sub'][i])
    else:
        lst.append(df_service['sub'][i])
    dict1["sub"] = lst
    list1.append(dict1)

print(list1)

А что если данные в Excel похожи на приведенные ниже:

enter image description here

Что если у нас есть такие данные? Как создать словарь для этого?

Нужно какое-то предложение, а не идея.

Ответы [ 3 ]

1 голос
/ 27 февраля 2020

enter image description here

Привет, @ncica, я ценю твой ответ, что, если у нас есть такие данные? Как создать словарь для этого.

1 голос
/ 27 февраля 2020
df_service = df_service.fillna(method='ffill')
result = [{'name':k[0],'usn':k[1],'sub':v["sub"].tolist(),"marks":v["marks"].tolist()} for k,v in df_service.groupby(['name', 'usn'])]
pprint (result)
1 голос
/ 27 февраля 2020

Вы можете использовать pandas .DataFrame.fillna с опцией method = 'ffill'. «ffill» означает «прямое заполнение» и будет распространять последнее действительное наблюдение вперед.

df_service = pd.read_excel(existing_excel_file, sheet_name='Sheet1')

df_service = df_service.fillna(method='ffill')
result = [{'name':k,'sub':g["sub"].tolist()} for k,g in df_service.groupby("name")]
print (result)

вывод:

[{'name': 'dhdn', 'sub': ['c', 'java', 'python']}, {'name': 'subbu', 'sub': ['java', 'perl']}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...