【问题标题】:How to format Pandas DataFrame with different array sizes如何格式化具有不同数组大小的 Pandas DataFrame
【发布时间】:2021-04-03 01:37:46
【问题描述】:

我需要动态创建一个看起来像这样的 Excel 电子表格:

 _______________________________________________________
| Name | Start Date | Title | Companies | Sub-companies |
|-------------------------------------------------------|
| Jim  | 01/01/2010 |  CTO  |  Google   |   YouTube     |
|-------------------------------------------------------|
|      |            |       |           |    FitBit     |
|-------------------------------------------------------|
|      |            |       |   Apple   |    NextVR     |
|-------------------------------------------------------|
|      |            |       |           |    Beats      |
|-------------------------------------------------------|
| Tom  | 12/12/2020 |  CEO  |  Amazon   |   Audible     |
|-------------------------------------------------------|
|      |            |       |           |    Zappos     |
|-------------------------------------------------------|
|      |            |       |  Samsung  |  Biologics    |
|-------------------------------------------------------|
|      |            |       |           |    Cheil      |
|-------------------------------------------------------|

这是我目前的代码:

import pandas as pd

df = pd.DataFrame({
    "Name": ["Jim", "Tom"],
    "Start Date": ["01/01/2010", "12/12/2020"],
    "Companies": ["Google", "Apple", "Amazon", "Samsung"],
    "Sub-companies": [
         "YouTube", "FitBit", "NextVR", "Beats", 
         "Audible", "Zappos", "Biologics", "Cheil"
         ]
})

print(df)

df.to_excel("output.xlsx", sheet_name="Webtoons Comic Data")

这不起作用,因为“所有数组的长度必须相同” 我该怎么做呢? 我目前的计划是通过在每个列数组中添加空格来逐行制作。有更好的方法吗? 我不需要帮助填充数组,只需构建 DF 本身。 感谢您的帮助。

【问题讨论】:

  • 这更像是一个多重索引~
  • 你最好按行而不是按列输入。
  • @Simon 我该怎么做?我目前的想法是有一个类似 [None, None, None, "Google", "Youtube"] 的数组,然后将每个项目添加到每一列
  • @Mick,首先创建一个带有标题的空数据框。然后逐行插入。

标签: python arrays excel pandas dataframe


【解决方案1】:

如果你想插入自己,好的缩进会很有帮助

import pandas as pd
import numpy as np
df = pd.DataFrame(
    columns=[
        'Name', 'Start Date',   'Title', 'Companies',   'Sub-companies',
        ],
    data = np.array([[
        'Jim',  '01/01/2010',   'CTO',  'Google',       'YouTube',
        ], [
        '',     '',             '',     '',             'FitBit',
        ], [
        '',     '',             '',     'Apple',        'NextVR',
    ]]),
    )

【讨论】:

  • 这个解决方案可以解决问题,它不像我希望的那样是单行机,但它让我可以根据客户的要求灵活地更改它。谢谢。
【解决方案2】:

正如我在 cmets 中提到的,我们可以尝试设置索引来做到这一点

df = pd.DataFrame({'Name':["Jim","Jim","Jim","Jim","Tom","Tom","Tom","Tom"],
"Companies": ["Google","Google", "Apple","Apple", "Amazon", "Amazon","Samsung","Samsung"],
    "Sub-companies": [
         "YouTube", "FitBit", "NextVR", "Beats", 
         "Audible", "Zappos", "Biologics", "Cheil"
         ]
})
df.set_index(['Name','Companies'])
               Sub-companies
Name Companies              
Jim  Google          YouTube
     Google           FitBit
     Apple            NextVR
     Apple             Beats
Tom  Amazon          Audible
     Amazon           Zappos
     Samsung       Biologics
     Samsung           Cheil
#df.set_index(['Name','Companies']).to_excel()

【讨论】:

  • 这很有帮助,但电子表格中数据的外观确实很重要,有没有办法让公司只显示一次?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 2021-10-23
  • 2023-01-03
相关资源
最近更新 更多