От Dbf к массиву - PullRequest
       23

От Dbf к массиву

1 голос
/ 10 июля 2019

Как я могу преобразовать dbf в массив numpy, не используя arcpy?

Я пытался использовать библиотеку dbf , но я не понял, каквыберите определенные столбцы из моего dbf , чтобы создать соответствующий массив numpy .

Вот сценарий, который я хочу воспроизвести без использования arcpy:

arr = arcpy.da.TableToNumPyArray(inTable ,("PROVINCE","ZONE_CODE","MEAN", "Datetime","Time"))
arr = sorted(arr,key=lambda x:datetime.strptime(str(x[3]),"%d/%m/%Y %H:%M:%S"))

Используя эти командные строки, я могу выбрать нужные столбцы и затем отсортировать их в хронологическом порядке (это цель моей программы).

Вот тот, который ясделано с помощью dbf lib:

arr = dbf.Table(inTable)
arr.open()
arr = sorted(arr,key=lambda x:datetime.strptime(str(x[7]),"%d/%m/%Y %H:%M:%S"))

Я не знаю, как выбрать нужные столбцы, и это просто длится вечность для компиляции и сортировки.

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 10 июля 2019

Следует отметить, что arr - это не то же самое между вашими фрагментами кода - в первом это numpy array, а во втором это dbf Table.

Чтобы получить то, что вы хотите:

import dbf
import numpy

table = dbf.Table('some_table.dbf')
table.open()

arr = numpy.array([
    (r.province, r.zone_code, r.mean, r.datetime, r.time)
    for r in table
    ])
arr = sorted(arr,key=lambda x:datetime.strptime(str(x[3]).strip(),"%d/%m/%Y %H:%M:%S"))

Я не уверен, какая разница будет в производительности.


Раскрытие информации: я являюсь автором dbf пакет.

...