将包含标题列表和行列表的列表转化为 pandas DataFrame。

228

我正在将电子表格的内容读入pandas中。DataNitro有一个方法,可以将选择的矩形单元格作为列表的列表返回。

table = Cell("A1").table

提供

table = [['Heading1', 'Heading2'], [1 , 2], [3, 4]]

headers = table.pop(0) # gives the headers as list and leaves data

我正在忙着编写代码来翻译这个,但我猜这是一个如此简单的用法,肯定有一种方法可以做到这一点。在文档中找不到它。有没有指导可以简化这个过程的方法?
4个回答

337

直接调用pd.DataFrame构造函数:

df = pd.DataFrame(table, columns=headers)
df

   Heading1  Heading2
0         1         2
1         3         4

2乘以2是一个不幸的例子。我原本期望每个列表成为一列,但是pandas却横向处理列表并创建了列。 - user1700890

111

按照EdChum上面解释的方法,列表中的值被显示为行。如果要将列表的值以DataFrame中的列的形式显示,只需使用transpose(),如下所示:

table = [[1 , 2], [3, 4]]
df = pd.DataFrame(table)
df = df.transpose()
df.columns = ['Heading1', 'Heading2']

结果如下:

      Heading1  Heading2
0         1        3
1         2        4

你确定 df = df.transpose() 吗? 我有一个列表的列表(内部列表有11个元素),需要将它们以同样的方式放入pandas数据框中,但为了得到你展示的输出,我省略了 transpose - Sinux1

9

即使没有使用pop,我们可以使用set_index来操作列表。

pd.DataFrame(table).T.set_index(0).T
Out[11]: 
0 Heading1 Heading2
1        1        2
2        3        4

更新 from_records
table = [['Heading1', 'Heading2'], [1 , 2], [3, 4]]

pd.DataFrame.from_records(table[1:],columns=table[0])
Out[58]: 
   Heading1  Heading2
0         1         2
1         3         4

2
table的示例中,可以按照以下方式调用DataFrame构造函数:
table = [['Heading1', 'Heading2'], [1 , 2], [3, 4]]

df = pd.DataFrame(table[1:], columns=table[0])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接