У меня есть массив типа numpy:

 ['test_a','help_b','apple_c']

Я хочу два массива:

 ['test','help','apple']

А также

 ['a','b','c']
0
NBC 21 Авг 2018 в 05:37

5 ответов

Лучший ответ

Чистое решение на питоне:

x = np.array(['test_a','help_b','apple_c'])

a, b = zip(*[k.split('_') for k in x.tolist()])

>>> a # can always make this list(a)
('test', 'help', 'apple')

Использование pandas

>>> pd.DataFrame(pd.Series(x).str.split('_').tolist())

    0       1
0   test    a
1   help    b
2   apple   c

Такой, что

>>> df2[0].tolist()
['test', 'help', 'apple']
1
rafaelc 21 Авг 2018 в 02:41

Учитывая список:

In [11]: xs = ['test_a','help_b','apple_c']

Я могу разделить каждый элемент и затем "распаковать" (транспонировать) результаты:

In [12]: a, b = zip(*map(lambda x: x.split('_'), xs))

Вот что у меня осталось:

In [13]: a
Out[13]: ('test', 'help', 'apple')

In [14]: b
Out[14]: ('a', 'b', 'c')
0
chrisaycock 21 Авг 2018 в 02:42

ИЛИ ЖЕ:

>>> l=your_numpy_array.tolist()
>>> a,b=[i.split('_')[0] for i in l],[i.split('_')[1] for i in l]
>>> a
['test', 'help', 'apple']
>>> b
['a', 'b', 'c']
>>> 
0
U10-Forward 21 Авг 2018 в 03:38

Использовать понимание списка и сложную распаковку numpy строк:

a = np.array(['test_a','help_b','apple_c'])
x, y = np.array([x.split('_') for x in a]).T

Результат:

X = array(['test', 'help', 'apple'], dtype='<U5')

Y = array(['a', 'b', 'c'], dtype='<U5')

0
Lev Zakharov 21 Авг 2018 в 02:42

Если бы это был список. Вы можете легко сделать это как под.

result1=[]
result2=[]
for item in input_list:
    r1, r2 = item.split('_')
    result1.append(r1)
    result2.append(r2)
1
bla 21 Авг 2018 в 04:22
51940830