Как запросить у Dynamodb столбец данных Python? - PullRequest
0 голосов
/ 01 ноября 2018

Я могу запросить DynamodB, используя идентификатор с фиксированным значением (300254), используя следующий код:

response = table.query(
    KeyConditionExpression=Key('id').eq(300254)
for i in response['Items']:
    print(i['id'], ":", i['name'], ":", i['sal'])

Но если я хочу заменить жестко закодированное значение на мой нижеприведенный кадр данных Python (dfnew), как выполнить запрос или сканирование в DynamodB? У dfnew есть 3 поля: id, name, sal и id - это первичный ключ в DynamodB. Возможно ли это?

dfnew = pd.read_csv("C:\\babynames.csv")
response = table.query(KeyConditionExpression=(Key('id').eq(dfnew.id))

Выше строка кода не выполняется, его сбой. Также не дает правильной ошибки. Это правильный путь "dfnew.id" или требуется какое-либо изменение?

response = table.query(KeyConditionExpression=(Key('id').eq(dfnew.iloc[0]['id']))) 

Пробовал также с помощью строки выше, но получая ошибку ниже. Любая помощь о том, как этого добиться?

TypeError: cannot do positional indexing on <class 'pandas.core.indexes.range.RangeIndex'> with these indexers [id] of <class 'str'> 

Заранее спасибо.

1 Ответ

0 голосов
/ 20 ноября 2018

Я провел небольшое исследование, и код ниже работал отлично. Может быть полезным для таких, как я.

itemsList = []
for i in range(len(dfnew.loc[:, 'id'])):
    response = table.query(KeyConditionExpression=Key('id').eq(int(dfnew.at[i, 'id'])))
    itemsList += response['Items']
    df = pd.DataFrame(itemsList)

print("Record count:", df.count())
df.to_csv("C:\\outputs\\DynamoOutput.csv")

Приведенный выше код выполняет поиск в таблице Dynamodb, беря данные из моего входного фрейма данных (dfnew.id) и предоставляя ответ в формате json. Наконец-то можно экспортировать в CSV.

...