【问题标题】:How to merge two lists of different lengths as a Pandas dataframe?如何将两个不同长度的列表合并为 Pandas 数据框?
【发布时间】:2018-10-17 13:04:21
【问题描述】:

我有两个列表要合并为 pandas 数据框。列将是 CSV 的标题,数据包含作为单个列表的数据行。

import pandas as pd
columns = [column[0] for column in cursor.description]
len(columns)
>5

data = cursor.fetchall()
len(data)
>2458

len(data[0])
>5

df = pd.DataFrame(data=data, index=None, columns=columns)
>ValueError: Shape of passed values is (1, 2458), indices imply (5, 2458).

有人可以帮我将这两个列表合并为熊猫数据框吗?如果我缺少任何其他细节,请告诉我。 谢谢!

【问题讨论】:

  • 能把print(data.shape)的结果加进去吗?
  • @Yuca,“列表”对象没有“形状”属性。
  • 好的,那么 data 是列表的列表吗?
  • @Yuca,是的。共有 2458 条记录,具有 5 个不同的属性,所有行都作为一个列表包装到一个列表中。
  • 只是为了确保我理解正确,df = pd.DataFrame(data) 有效,不是吗?

标签: python pandas list dataframe pyodbc


【解决方案1】:

光标的存在表明您正在使用pyodbcdata 包含 pyodbc.Row 对象,因此 pd.DataFrame 构造函数无法拆分数据。

试试这个

df = pandas.DataFrame([tuple(t) for t in cursor.fetchall()], columns=columns)

【讨论】:

【解决方案2】:

您的 csv 文件显然有 5 列,但您的数据是单个值列表。这意味着您也只需要 1 个列标题。 Pandas 现在抱怨,因为列列表的维度 (5) 与数据中的列数 (1) 不匹配。例如,您可以通过以下方式解决此问题:

df = pd.DataFrame(data=data, index=None, columns=[columns[0]])

假设您要使用第一列名称。

【讨论】:

  • 只将第一列属性分配给所有行。
猜你喜欢
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
  • 2017-11-30
  • 1970-01-01
  • 2015-03-21
  • 2019-03-08
  • 2018-10-02
相关资源
最近更新 更多