Вывод np.genfromtxt
представляет собой массив, поэтому тот факт, что число столбцов в каждой строке варьируется, означает, что вам нужно соответствующим образом обрабатывать пропущенные значения.Вы можете рассмотреть возможность итерации по файлу с csv
, но другой вариант будет просто использовать pd.read_csv
, как это
> pd.read_csv('file1.txt', sep=r'\s+', header=None, dtype='|U').values[:,1:]
> array([['aa', 'bb', 'dd', 'zz', 'yy', 'ww'],
['pp', 'qq', 'aa', 'ss', nan, nan],
['mm', 'aa', 'zz', 'qq', 'rr', 'dd'],
['uu', 'ss', 'll', 'pp', nan, nan],
['hh', 'jj', 'qq', 'ss', 'uu', nan]], dtype=object)
Если важна производительность и строки действительно состоят из двух символов, вымог установить dtype='|S2'
в конструкторе.В зависимости от версии pandas
, которая вам нужна, вам также может потребоваться установить engine='python'
, чтобы избежать получения предупреждений о регулярном выражении (не делайте этого, если только у вас не возникнут проблемы, это медленнее и может быть ненужным).
У вашего arr
есть дублирующий элемент в 2 и 4, но, если предположить, что все правильно, то все будет выглядеть так:
In [1] a=pd.read_csv('file1.txt', sep=r'\s+', header=None).values[:,1:].astype('<U2')
In [2] arr = np.array(['aa', 'qq', 'ss', 'zz', 'ss', 'pp', 'dd'])
In [3] [tuple(j for j, el in enumerate(arr) if el in set(a[i])) for i in range(len(a))]
Out[4] [(0, 3, 6), (0, 1, 2, 4, 5), (0, 1, 3, 6), (2, 4, 5), (1, 2, 4)]