将元组列表转换为dataframe - 其中元组的第一个元素是列名

时间:2017-07-18 14:59:56

标签: python pandas

我有一个格式列表:

tuples = [('a',1,10,15),('b',11,0,3),('c',7,19,2)]  # etc.

我希望将数据存储在DataFrame中,格式为:

      a       b     c      ...  

0     1       11     7     ...   
1     10      0      19    ...  
2     15      3      2     ...   

元组的第一个元素是我希望的列名。

我明白,如果我能通过跑步来实现我想要的目标:

df = pd.DataFrame(tuples)
df = df.T
df.columns = df.iloc[0]
df = df[1:]

但在我看来,它应该比这更直接。这是解决这个问题的更加pythonic方式吗?

3 个答案:

答案 0 :(得分:7)

这是单程

In [151]: pd.DataFrame({x[0]:x[1:] for x in tuples})
Out[151]:
    a   b   c
0   1  11   7
1  10   0  19
2  15   3   2

答案 1 :(得分:4)

您可以使用词典理解,例如:

output$queryTable = renderTable ({
    if(is.null(values$data$mat)) return(NULL)
    df[c("XLOC_005722", "XLOC_001942", "XLOC_001107"), ]  #hardcoded
})
<{3>}中的

或:

pd.DataFrame({k:v for k,*v in tuples})
<{3>}中的

生成:

pd.DataFrame({t[0]: t[1:] for t in tuples})

列将按字母顺序排序

如果您希望列的排序方式与原始内容类似,则可以使用>>> pd.DataFrame({k:v for k,*v in tuples}) a b c 0 1 11 7 1 10 0 19 2 15 3 2 参数:

columns

再次在

pd.DataFrame({k:v for k,*v in tuples},columns=[k for k,*_ in tuples])

我们可以将其缩短为:

pd.DataFrame({t[0]: t[1:] for t in tuples},columns=[t[0] for t in tuples])

答案 2 :(得分:0)

如果元组中的值按行排列,则

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