【问题标题】:Create Pandas Dataframe with different sized columns创建具有不同大小列的 Pandas 数据框
【发布时间】:2021-04-05 02:55:45
【问题描述】:

我需要创建一个数据框并将其转换为 CSV,因此输出将如下所示:

People,Age,Pets,Pet Age
Tom,24,Dog,5
Jim,30,Cat,10,
Sally,21,Dog,1
     ,  ,Dog,3
     ,  ,Cat,15
     ,  ,Horse,10

如您所见,宠物比人多,物体之间的关系并不重要。更改为 Excel 后的输出应如下所示:

 _______________________________
| Person | Age | Pets | Pet Age |
|-------------------------------|
|  Tom   | 24  | Dog  |  5      |
|-------------------------------|
|  Jim   | 30  | Cat  |  10     |
|-------------------------------|
|  Sally | 21  | Dog  |  1      |
|-------------------------------|
|        |     | Cat  |  15     |
|-------------------------------|
|        |     | Horse|  10     |
---------------------------------

到目前为止我的代码是:

df = pd.DataFrame({
    "People": [Tom, Jim, Sally],
    "Age": [24, 30, 21],
    "Pets": [Dog, Cat, Dog, Dog, Cat, Horse],
    "Pet Age": [5, 10, 1, 3, 15, 10]

})

但它给了我:ValueError: arrays must be all the length

非常感谢任何帮助,谢谢。

【问题讨论】:

  • 您的输入到底是什么?您是否有长度不等的列表字典,或者只是一些随机数组?

标签: python excel pandas dataframe csv


【解决方案1】:

您可以将DataFrame.from_dict()orient='index' 一起使用,而不是DataFrame() 构造函数:

data = {
    'People': ['Tom', 'Jim', 'Sally'],
    'Age': [24, 30, 21],
    'Pets': ['Dog', 'Cat', 'Dog', 'Dog', 'Cat', 'Horse'],
    'Pet Age': [5, 10, 1, 3, 15, 10],
}

df = pd.DataFrame.from_dict(data, orient='index').T

#   People   Age   Pets  Pet Age
# 0    Tom    24    Dog        5
# 1    Jim    30    Cat       10
# 2  Sally    21    Dog        1
# 3   None  None    Dog        3
# 4   None  None    Cat       15
# 5   None  None  Horse       10

写成 csv:

df.to_csv('pets.csv', index=False)

# People,Age,Pets,Pet Age
# Tom,24,Dog,5
# Jim,30,Cat,10
# Sally,21,Dog,1
# ,,Dog,3
# ,,Cat,15
# ,,Horse,10

【讨论】:

  • 这很好,谢谢。但是当它变成 csv 或 xlsx 时,它会添加一个索引列,我该如何删除它?
  • 你太棒了。谢谢。
猜你喜欢
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 2020-02-22
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
相关资源
最近更新 更多