Лучший способ преобразовать XML в X12 и X12 к XML

Я собираюсь взвесить здесь, поскольку я думаю, что это намного быстрее, чем любой из предлагаемых методов. argmin дает векторное значение первого значения False в каждой строке результата np.isnan, что является сложной частью. Он все еще полагается на цикл Python для извлечения значений, но поиск очень быстрый:

def get_first_non_null(df):
    a = df.values
    col_index = np.isnan(a).argmin(axis=1)
    return [a[row, col] for row, col in enumerate(col_index)]

EDIT: вот полностью векторизованное решение, которое может быть намного быстрее, в зависимости от формы вход. Обновленный бенчмаркинг ниже.

def get_first_non_null_vec(df):
    a = df.values
    n_rows, n_cols = a.shape
    col_index = np.isnan(a).argmin(axis=1)
    flat_index = n_cols * np.arange(n_rows) + col_index
    return a.ravel()[flat_index]

Если строка полностью равна нулю, то соответствующее значение также будет равно null. Вот несколько бенчмаркинга против решения unutbu:

df = pd.DataFrame(np.random.choice([1, np.nan], (10000, 1500), p=(0.01, 0.99)))
#%timeit df.stack().groupby(level=0).first().reindex(df.index)
%timeit get_first_non_null(df)
%timeit get_first_non_null_vec(df)
1 loops, best of 3: 220 ms per loop
100 loops, best of 3: 16.2 ms per loop
100 loops, best of 3: 12.6 ms per loop
In [109]:


df = pd.DataFrame(np.random.choice([1, np.nan], (100000, 150), p=(0.01, 0.99)))
#%timeit df.stack().groupby(level=0).first().reindex(df.index)
%timeit get_first_non_null(df)
%timeit get_first_non_null_vec(df)
1 loops, best of 3: 246 ms per loop
10 loops, best of 3: 48.2 ms per loop
100 loops, best of 3: 15.7 ms per loop


df = pd.DataFrame(np.random.choice([1, np.nan], (1000000, 15), p=(0.01, 0.99)))
%timeit df.stack().groupby(level=0).first().reindex(df.index)
%timeit get_first_non_null(df)
%timeit get_first_non_null_vec(df)
1 loops, best of 3: 326 ms per loop
1 loops, best of 3: 326 ms per loop
10 loops, best of 3: 35.7 ms per loop
22
задан jdigital 16 January 2009 в 02:26
поделиться

3 ответа

В итоге я создал свой собственный инструмент преобразования XML <-> x12. Были некоторые коммерческие предложения, с которыми я столкнулся (одно из которых, из EtaSoft , стоит проверить, чтобы найти прекрасную документацию), но в конечном итоге преимущество собственного решения было слишком велико.

Я действительно использовал файлы конфигурации из X12 :: Parser в качестве основы для парсера X12, по сути превращая файл конфигурации в код и устраняя накладные расходы и обработку ошибок для управления файлами конфигурации, которые теоретически почти никогда не должны изменяться.

7
ответ дан 29 November 2019 в 05:36
поделиться

Взгляд pyx12.

Это включает сценарии для X12 к XML и XML к X12.

, Почему Python? Поскольку необходимо будет часто настраивать документы X12 для обработки позволенных изменений между плательщиками и поставщиками.

1
ответ дан S.Lott 29 November 2019 в 05:36
поделиться

Я могу поговорить с одним продуктом, которого следует избегать любой ценой, - это EcMap. Имея около года опыта работы с ним сейчас, работая в отделе EDI, я могу сказать, что редко видел приложение с более плохо спроектированным интерфейсом (за исключением, возможно, Lotus Notes), более запутанной пользовательской документацией и абсолютно нелепым схема лицензирования. По сути, он лицензируется на ЦП (под ЦП они подразумевают ядро, так что вам действительно сложно, если у вас есть новый четырехъядерный ЦП), и это более 10 КБ на лицензию по последней цитате, которую я слышал.

3
ответ дан 29 November 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: