преобразовать столбец данных из строки в список чисел - PullRequest
0 голосов
/ 26 января 2020

Я создал следующий файл данных из файла CSV:

id      marks
5155    1,2,3,,,,,,,,
2156    8,12,34,10,4,3,2,5,0,9
3557    9,,,,,,,,,,
7886    0,7,56,4,34,3,22,4,,,
3689    2,8,,,,,,,,

Он проиндексирован на id. Значения для столбца marks являются строковыми. Мне нужно преобразовать их в список чисел, чтобы я мог перебирать их и использовать их в качестве номера индекса для другого кадра данных. Как я могу преобразовать их из строки в список? Я попытался добавить новый столбец и преобразовать их на основе " Добавить столбцы в DataFrame на основе другого столбца ", но это не удалось:

df = df.assign(new_col_arr=lambda x: np.fromstring(x['marks'].values[0], sep=',').astype(int))

Ответы [ 3 ]

0 голосов
/ 26 января 2020

Я предполагаю, что вы хотите создать НОВЫЙ фрейм данных, так как количество элементов отличается rnet от количества строк. Я предлагаю следующее:

#source data
df = pd.DataFrame({'id':[5155, 2156, 7886], 
                   'marks':['1,2,3,,,,,,,,','8,12,34,10,4,3,2,5,0,9', '0,7,56,4,34,3,22,4,,,']

# create dictionary from df:
dd = {row[0]:np.fromstring(row[1], dtype=int, sep=',') for _, row in df.iterrows()}

{5155: array([1, 2, 3]),
 2156: array([ 8, 12, 34, 10,  4,  3,  2,  5,  0,  9]),
 7886: array([ 0,  7, 56,  4, 34,  3, 22,  4])}

# here you pad the lists inside dictionary so that they have equal length
...

# convert dd to DataFrame:
df2 = pd.DataFrame(dd)
0 голосов
/ 27 января 2020

Я нашел две аналогичные альтернативы:

1.

df['marks'] = df['marks'].str.split(',').map(lambda num_str_list: [int(num_str) for num_str in num_str_list if num_str])

2.

df['marks'] = df['marks'].map(lambda arr_str: [int(num_str) for num_str in arr_str.split(',') if num_str])
0 голосов
/ 26 января 2020

Вот способ сделать:

df = df.assign(new_col_arr=df['marks'].str.split(','))

# convert to int
df['new_col'] = df['new_col_arr'].apply(lambda x: list(map(int, [i for i in x if i != ''])))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...