2016-10-25 3 views
3

У меня есть кадр данных:Как создать список списков целых чисел из DataFrame?

Values Values2 
1,2,3,4 0,2,3 
2,1,0,6 0,0,0 
9,8,7,6 1,0,1 

Я хочу, чтобы создать список списков. Я делаю это в следующем виде:

df[['Values']].values.tolist() 

В выводе ПОЛУЧАЕТ:

[['1,2,3,4'], 
['2,1,0,6'], 
['9,8,7,6']] 

Это строка, но мне нужен списки целого числа так:

[[1,2,3,4], 
    [2,1,0,6], 
    [9,8,7,6]] 

Как я могу сделать что?

ответ

7

Кажется, они хранятся в виде строки. Попробуйте следующее (не очень надежное, но в зависимости от контекста это может быть в порядке):

slist = df[['Values']].values.tolist() 
ilist = [ [int(s) for s in l[0].split(',')] for l in slist] 
+0

Я бы сравнить производительность этого решения и один в другом ответе, прежде чем решить, что для реализации. Это кажется более простым, но не использует собственные методы panda. – eguaio

3

Вы можете использовать str.split, чтобы разбить строку на запятой, с expand=True этого отделит каждое значение в его собственную колонку, вы может затем преобразовать тип в int, а затем получить значения в списке по желанию:

In [109]: 
df['Values'].str.split(',',expand=True).astype(int).values.tolist() 

Out[109]: 
[[1, 2, 3, 4], [2, 1, 0, 6], [9, 8, 7, 6]] 

Ломая это вниз:

In [110]: 
df['Values'].str.split(',',expand=True) 

Out[110]: 
    0 1 2 3 
0 1 2 3 4 
1 2 1 0 6 
2 9 8 7 6 

In [111]:  
df['Values'].str.split(',',expand=True).astype(int).info() 

<class 'pandas.core.frame.DataFrame'> 
RangeIndex: 3 entries, 0 to 2 
Data columns (total 4 columns): 
0 3 non-null int32 
1 3 non-null int32 
2 3 non-null int32 
3 3 non-null int32 
dtypes: int32(4) 
memory usage: 128.0 bytes 

Для обработки NaN/None значений используют to_numeric с stack и unstack:

In [114]: 
pd.to_numeric(df['Values'].str.split(',',expand=True).stack(), errors='coerce').unstack().values.tolist() 

Out[114]: 
[[1, 2, 3, 4], [2, 1, 0, 6], [9, 8, 7, 6]] 
+0

ТипError: long() аргумент должен быть строкой или числом, а не «NoneType» –

+0

Это означает, что у вас есть недопустимая или пустая строка, которая не была в ваших исходных данных образца в вашем вопросе, пожалуйста, обновите свой вопрос соответствующим образцом – EdChum