2016-11-16 121 views
5

DataFrame的单行并排打印值,即column_name,columne_value在一行和下一行中包含下一个column_name和columne_value。例如,下面的代码熊猫DataFrame:如何水平打印单行?

import pandas as pd 

df = pd.DataFrame([[100,200,300],[400,500,600]]) 
for index, row in df.iterrows(): 
    # other operations goes here.... 
    print row 

用于第一行的输出来作为

0 100 
1 200 
2 300 
Name: 0, dtype: int64  

有一种方法以具有水平印刷的每一行,并忽略的数据类型,名称?第一行举例:

0 1 2 
100 200 300 

回答

5

使用则to_frameT

df = pd.DataFrame([[100,200,300],[400,500,600]]) 
for index, row in df.iterrows(): 
    print(row.to_frame().T) 

    0 1 2 
0 100 200 300 
    0 1 2 
1 400 500 600 

注移调:
这类似于@副结核病,该方法to_frame答案是语法糖各地pd.DataFrame

事实上,如果我们follow the code

def to_frame(self, name=None): 
    """ 
    Convert Series to DataFrame 
    Parameters 
    ---------- 
    name : object, default None 
     The passed name should substitute for the series name (if it has 
     one). 
    Returns 
    ------- 
    data_frame : DataFrame 
    """ 
    if name is None: 
     df = self._constructor_expanddim(self) 
    else: 
     df = self._constructor_expanddim({name: self}) 

    return df 

指向_constructor_expanddim

@property 
def _constructor_expanddim(self): 
    from pandas.core.frame import DataFrame 
    return DataFrame 

,你可以看到简单的返回调用DataFrame

+0

@JohnE我编辑了我的帖子。 – piRSquared

+0

谢谢!这是一个伟大的复苏;-)和非常好的解释差异。 – JohnE

3

使用转属性:

df.T 

    0 1 2 
0 100 200 300 
+0

如果什么DF有一个像DF = pd.DataFrame多行([[100200300],[400500600]])。每行如何打印? – gmsi

+0

修改您的OP,您将反映问题的这一部分以及您的预期输出与此类数据框 – Boud

+0

更新了问题。谢谢 – gmsi

3

好像应该有一个简单的答案,但尝试用一行把它变成另一个数据帧。

data = {x: y for x, y in zip(df.columns, df.iloc[0])} 
sf = pd.DataFrame(data, index=[0]) 
print(sf.to_string()) 
2

八九不离十结合前两次的答案,你可以这样做:

for index, ser in df.iterrows(): 
    print(pd.DataFrame(ser).T) 

    0 1 2 
0 100 200 300 
    0 1 2 
1 400 500 600 

基本上发生的事情是,如果你提取从数据帧的行或列,你会得到一系列的显示为列。如果你做的是serser.T,那么它“看起来”就像一列。我的意思是,系列是一维,而不是两个,但你明白了......

因此,无论如何,你可以将系列转换为一行数据框。 (我把名字从“row”改为“ser”,以强调上面发生的事情)。关键是你必须首先转换为数据框(默认情况下这是一个列),然后转置它。

+0

我经常使用重建来解决问题。加上一个从我。 – piRSquared