pd.Series.to_list () изменяет dtype - PullRequest
1 голос
/ 30 апреля 2020

Когда я программирую на colab, я продолжаю сталкиваться с этой проблемой:

Вот мой df:

0                1
0    [2.7436598593417045e-05, 3.731542193080655e-05]
1    [8.279973504084787e-05, 2.145002145002145e-05]
2    [0.00022534319714215346, 0.0002031172259231674]
3    [3.239841667031943e-05, 2.7771297808289177e-05]
4    [0.00011311134356928321, 9.428422928088026e-05]

Я хочу получить данные из df [1] в список списков, чтобы я мог добавить его в мою модель. Для этого я запускаю:

df[1].to_list()

и получаю:

['[2.7436598593417045e-05, 3.731542193080655e-05]',
 '[8.279973504084787e-05, 2.145002145002145e-05]',
 '[0.00022534319714215346, 0.00020311722592316746]',
 '[3.239841667031943e-05, 2.7771297808289177e-05]',
 '[0.00011311134356928321, 9.428422928088026e-05]'] 

, который представляет собой список строк, которые я не могу использовать для ввода в модель. Я использую этот код все время локально, и он отлично работает, но на Colab я получаю этот результат. Любые идеи? Результат, который я хочу получить:

[[2.7436598593417045e-05, 3.731542193080655e-05],
 [8.279973504084787e-05, 2.145002145002145e-05],
 [0.00022534319714215346, 0.00020311722592316746],
 [3.239841667031943e-05, 2.7771297808289177e-05],
 [0.00011311134356928321, 9.428422928088026e-05]] 

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

Попробуйте ast.literal_eval

from ast import literal_eval

df[1].map(literal_eval).to_list()

[[2.7436598593417045e-05, 3.731542193080655e-05],
 [8.279973504084787e-05, 2.145002145002145e-05],
 [0.00022534319714215346, 0.00020311722592316746],
 [3.239841667031943e-05, 2.7771297808289177e-05],
 [0.00011311134356928321, 9.428422928088026e-05]]
0 голосов
/ 30 апреля 2020

Если я создаю кадр данных с элементами списка:

In [135]: df = pd.DataFrame([[1,[1,3]],[2,[3,5]]])                                                     
In [136]: df                                                                                           
Out[136]: 
   0       1
0  1  [1, 3]
1  2  [3, 5]
In [137]: df.dtypes                                                                                    
Out[137]: 
0     int64
1    object
dtype: object
In [138]: df[1].to_list()                                                                              
Out[138]: [[1, 3], [3, 5]]

То же самое выполняется со строками списков:

In [139]: df1 = pd.DataFrame([[1,'[1,3]'],[2,'[3,5]']])                                                
In [140]: df1                                                                                          
Out[140]: 
   0      1
0  1  [1,3]
1  2  [3,5]
In [141]: df1.dtypes                                                                                   
Out[141]: 
0     int64
1    object
dtype: object
In [142]: df1[1].to_list()                                                                             
Out[142]: ['[1,3]', '[3,5]']

df1 выглядит так же, как df, за исключением элементы столбца являются строками.

df1 тип фрейма часто является результатом сохранения df в csv и его перезагрузки.

In [143]: df.to_csv('test.csv')                                                                        
In [144]: cat test.csv                                                                                 
,0,1
0,1,"[1, 3]"
1,2,"[3, 5]"

для соответствия формату таблицы, это должен процитировать списки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...