2017-07-18 63 views
3

我有一个元组列表,格式为:转换清单 - 其中元组的第一个元素是列名

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方式吗?

回答

6

这里有一种方法

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

不错,解决方案。 +1 –

4

您可以使用字典解析,如:

pd.DataFrame({k:v for k,*v in tuples}) 

,或者:

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])

我们可以将其缩短为:

from operator import itemgetter 

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

我目前正在运行Python 2.7,所以我正确思考加星号的表达式不会工作?否则看起来像是一个很好的解 – tfcoe

+0

@tfcoe:没错。那么你最好使用切片符号。将更新它。 –

+0

也很好的分类。幸运的是,我的数据既是以前按字母顺序排序的,所需的输出也按字母顺序排列。 – tfcoe

相关问题