代码之家  ›  专栏  ›  技术社区  ›  Dalton Cézane

熊猫-格式化数据框行不起作用

  •  0
  • Dalton Cézane  · 技术社区  · 8 年前

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

    我的数据帧输出是:

                           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行,获取结果
    fmt_values=self._format_strings()
    文件“/usr/local/lib/python3.5/dist packages/pandas/io/formats/format.py”,第1961行,格式为字符串
    返回[self.values中x的self.formatter(x)]
    文件“/usr/local/lib/python3.5/dist packages/pandas/io/formats/format.py”,1961行,in
    返回[self.values中x的self.formatter(x)]
    密钥错误:“%”

    有什么建议/帮助吗?

    2 回复  |  直到 8 年前
        1
  •  1
  •   jezrael    8 年前

    对我来说最后的解决方案是改变 % 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...  
    
        2
  •  0
  •   nimrodz    8 年前

    尝试

    my_df.to_dict(orient='records')