Панды - не работает форматирование строк данных - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь отформатировать строки моего фрейма данных, но безуспешно.

Вывод моего фрейма данных:

                       X                              Y
443   cd2a9dd781c1396d4000ae05fcc3a0b00a5dc4f9     889.825    
111   ae3faf7ed08967e93d5f5ed6e10a5b256ec8c7fa     883.275    
221   601f669c760687b84ec57fe1eec213e26114a262     868.345   
631   80f54ce2aa2839e80cd5447cb369ec31f5e1fd47     867.545   

Я хочу вывод в следующем формате:

{"X": "cd2a9dd781c1396d4000ae05fcc3a0b00a5dc4f9", "Y": 889.8}
{"X": "ae3faf7ed08967e93d5f5ed6e10a5b256ec8c7fa", "Y": 883.2}

Я пробовал:

format = '{"X": "{}", "Y": {%.1f}}'.format
my_df.apply(lambda x: format(**x), 1)

и:

my_df.style.format({'X': '{"X": "{}",', 'Y': '"Y": {%.1f}}'})

и:

my_df.to_string(formatters={'X':'"X": "{}",'.format, 'Y':'"Y": {%.1f}'.format})

У меня ничего не получалось.Эта последняя попытка (to_string) возвращает следующую ошибку:

Файл "/usr/local/lib/python3.5/dist-packages/pandas/io/formats/format.py", строка 1781, в get_result
fmt_values ​​= self._format_strings ()
Файл "/usr/local/lib/python3.5/dist-packages/pandas/io/formats/format.py", строка 1961,в _format_strings
вернуть [self.formatter (x) для x в self.values]
Файл "/usr/local/lib/python3.5/dist-packages/pandas/io/formats/format.py", строка 1961, в
вернуть [self.formatter (x) для x в self.values]
KeyError: '%'

Любое предложение / помощь?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Для меня работает последнее решение с изменением % на ::

df = df.to_string(formatters={'X':'"X": "{}",'.format, 'Y':'"Y": {:.1f}'.format})
print (df)
                                                    X          Y
443  "X": "cd2a9dd781c1396d4000ae05fcc3a0b00a5dc4f9", "Y": 889.8
111  "X": "ae3faf7ed08967e93d5f5ed6e10a5b256ec8c7fa", "Y": 883.3
221  "X": "601f669c760687b84ec57fe1eec213e26114a262", "Y": 868.3
631  "X": "80f54ce2aa2839e80cd5447cb369ec31f5e1fd47", "Y": 867.5

При необходимости возможен новый столбец форматирования, используйте понимание списка:

df['new'] = ['"X": "{}", "Y": {:.1f}'.format(i, j) for i, j in zip(df['X'], df['Y'])]
print (df)
                                            X        Y  \
443  cd2a9dd781c1396d4000ae05fcc3a0b00a5dc4f9  889.825   
111  ae3faf7ed08967e93d5f5ed6e10a5b256ec8c7fa  883.275   
221  601f669c760687b84ec57fe1eec213e26114a262  868.345   
631  80f54ce2aa2839e80cd5447cb369ec31f5e1fd47  867.545   

                                                   new  
443  "X": "cd2a9dd781c1396d4000ae05fcc3a0b00a5dc4f9...  
111  "X": "ae3faf7ed08967e93d5f5ed6e10a5b256ec8c7fa...  
221  "X": "601f669c760687b84ec57fe1eec213e26114a262...  
631  "X": "80f54ce2aa2839e80cd5447cb369ec31f5e1fd47...  
0 голосов
/ 08 июня 2018

попробуй

my_df.to_dict(orient='records')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...