【问题标题】:Converting dict to DataFrame gives too many rows将 dict 转换为 DataFrame 会产生太多行
【发布时间】:2022-01-08 09:57:31
【问题描述】:

我正在尝试将 dict 转换为 Pandas DataFrame,如下所示:

dff = pd.DataFrame(
{
'CEO': 'ucMMe Mhll', 
'address': 'vs5dlt3 B Se1kC eve0nre', 
'address2': '-', 
'city': 'a CSatanral', 
'companyName': 'Agilent Technologies Inc.', 
'country': 'nUatei tdetSs', 
'description': "tns oo el' yty", 
'employees': 17124, 
'exc': 'gdgdgd', 
'industry': 'sgeiTeotiroaLbtans r', 
'issueType': 'abc', 
'phone': '14087832319', 
'primarySicCode': 4008, 
'sector': ',atnSii Scilcofe,nnse TecisaPliinafs cedorhv cre', 
'securityName': 'elooIne.nen htc iisTcgAgl', 
'state': 'ailairofnC', 
'symbol': 'A', 
'tags': ['nllh he', 'gth', 'acsl', 'isiad', 'nr aitT'], 
'website': 'win.gcm.', 
'zip': '0752501-19'} )

当我打印出 DataFrame 时,我看到以下输出:

print(dff)

我希望只在 DataFrame 中看到 1 行,但它给出了 5。我不明白为什么。我在这里做错了什么?

【问题讨论】:

  • 这是因为您的标签行有 5 个,因此它会尝试“为其余部分填充空白”。要解决此问题,请在其周围放置第二层括号,以便将其视为一行,而不是 5。
  • 不知道,谢谢@LarrytheLlama

标签: python python-3.x pandas dataframe


【解决方案1】:

你没有做错任何事。由于tags 是一个列表,Pandas 将所有其他字段广播到与tags 相同的大小并制作一个数据帧。你可以这样做:

pd.Series(your_dict).to_frame().T

或将您的 dict 包裹在 [] 周围,表示它是一行(记录方向):

pd.DataFrame([your_dict])

【讨论】:

  • 太棒了!谢谢!
【解决方案2】:

这是因为您的标签行有 5 个,因此它会尝试“为其余部分填写空白”。要解决此问题,请在其周围放置第二层括号,以便将其视为一行,而不是 5。

dff = pd.DataFrame(
{
'CEO': 'ucMMe Mhll', 
'address': 'vs5dlt3 B Se1kC eve0nre', 
'address2': '-', 
'city': 'a CSatanral', 
'companyName': 'Agilent Technologies Inc.', 
'country': 'nUatei tdetSs', 
'description': "tns oo el' yty", 
'employees': 17124, 
'exc': 'gdgdgd', 
'industry': 'sgeiTeotiroaLbtans r', 
'issueType': 'abc', 
'phone': '14087832319', 
'primarySicCode': 4008, 
'sector': ',atnSii Scilcofe,nnse TecisaPliinafs cedorhv cre', 
'securityName': 'elooIne.nen htc iisTcgAgl', 
'state': 'ailairofnC', 
'symbol': 'A', 
'tags': [['nllh he', 'gth', 'acsl', 'isiad', 'nr aitT']], # Double brackets to indicate 1 cell 
'website': 'win.gcm.', 
'zip': '0752501-19'} )

【讨论】:

    【解决方案3】:

    您可以将每个字典值包装在一个列表中:

    dff = pd.DataFrame({k: [v] for k,v in dct.items()})
    
    >>> dff
              CEO                  address  ...   website         zip
    0  ucMMe Mhll  vs5dlt3 B Se1kC eve0nre  ...  win.gcm.  0752501-19
    
    [1 rows x 20 columns]
    

    【讨论】:

    • 谢谢@not_speshal
    • @edn - 乐于助人! :)
    猜你喜欢
    • 2020-10-23
    • 2017-02-21
    • 2017-01-28
    • 2018-10-14
    • 2017-03-03
    • 2021-07-16
    • 2021-11-06
    • 2017-05-18
    • 2013-12-28
    相关资源
    最近更新 更多