【问题标题】:Pandas - Formatting dataframe rows not workingPandas - 格式化数据框行不起作用
【发布时间】:2018-11-18 03:02:40
【问题描述】:

我正在尝试格式化我的数据框的行,但没有成功。

我的数据框输出是:

                       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
return [self.formatter(x) for x in self.values]
文件“/usr/local/lib/python3.5/dist-packages/pandas/io/formats/format.py”,第 1961 行,在
return [self.formatter(x) for x in self.values]
键错误:'%'

有什么建议/帮助吗?

【问题讨论】:

    标签: python python-3.x pandas formatting


    【解决方案1】:

    试试

    my_df.to_dict(orient='records')
    

    【讨论】:

      【解决方案2】:

      对我来说,使用更改 % to ::

      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...  
      

      【讨论】:

      • 成功了。但是 X 值被打印为“cd2a9dd781c1396d4000ae05fcc3a ...”,这是不完整的。我该怎么做才能输出完整的字符串? “cd2a9dd781c1396d4000ae05fcc3a0b00a5dc4f9”而不是“cd2a9dd781c1396d4000ae05fcc3a ...”?谢谢。
      • @Dalton Cézane 这是显示问题,解决方案是here
      猜你喜欢
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多