如何将Pandas DataFrame转为格式化的Records字典?
问题描述
我创建了如下数据:
technologies = [ ("a","2","3"), ("4","5","6"), ("7","8","9") ] df = pd.DataFrame(technologies,columns = ['C1','C2','C3']) print(df)
得到的DataFrame如下:
C1 C2 C3 0 a 2 3 1 4 5 6 2 7 8 9
随后我使用df.to_dict('records')将DataFrame转为Records字典:
df2 = df.to_dict('records') print(df2)
得到的输出为:
[{'C1': 'a', 'C2': '2', 'C3': '3'}, {'C1': '4', 'C2': '5', 'C3': '6'}, {'C1': '7', 'C2': '8', 'C3': '9'}]
但我希望得到如下格式化的输出:
[{'C1': 'a', 'C2': '2', 'C3': '3'}, {'C1': '4', 'C2': '5', 'C3': '6'}, {'C1': '7', 'C2': '8', 'C3': '9'}]
作为编程新手,请问是否可以实现该预期输出?
解决方案
当然可以实现,以下两种实用方法能帮你得到格式化的输出:
方法1:用pprint模块美化打印
Python内置的pprint(pretty print)模块专门用于美化复杂数据结构的输出,代码示例:
import pandas as pd import pprint technologies = [ ("a","2","3"), ("4","5","6"), ("7","8","9") ] df = pd.DataFrame(technologies,columns = ['C1','C2','C3']) df2 = df.to_dict('records') # indent参数控制缩进空格数,设置为2即可匹配预期格式 pprint.pprint(df2, indent=2)
运行后会直接输出你想要的排版格式,还能通过width参数调整每行的字符宽度,适配不同场景。
方法2:用json.dumps指定缩进
如果需要更灵活的格式控制,可以借助json模块的dumps方法,代码示例:
import pandas as pd import json technologies = [ ("a","2","3"), ("4","5","6"), ("7","8","9") ] df = pd.DataFrame(technologies,columns = ['C1','C2','C3']) df2 = df.to_dict('records') # indent=2设置缩进空格数,ensure_ascii=False避免中文转义(这里无中文也可省略) print(json.dumps(df2, indent=2, ensure_ascii=False))
注意:这种方法会把字典里的单引号转为双引号,如果必须保留单引号,优先选择pprint方法。
补充小技巧
如果是在Jupyter Notebook环境中,直接输入变量名(比如df2)并运行,Notebook会自动美化显示数据结构,无需额外代码。
内容的提问来源于stack exchange,提问作者Mạnh Tô
相关产品推荐
相关产品推荐

