Pandas DataFrame:如何水平打印单行?

时间:2016-11-16 01:53:42

标签: python pandas dataframe

DataFrame的单行并排打印值,即column_name然后columne_value在一行中,下一行包含next column_name和columne_value。例如,代码

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    

有没有办法让每行水平打印并忽略数据类型,Name?第一行示例:

0    1    2
100  200  300

4 个答案:

答案 0 :(得分:6)

使用转置属性:

df.T

     0    1    2
0  100  200  300

答案 1 :(得分:6)

使用to_frame方法,然后使用T

进行转置
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

<强> 注意:
这与@ JohnE的答案类似,方法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

答案 2 :(得分:3)

似乎应该有一个更简单的答案,但尝试将其转换为另一行的另一个DataFrame。

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

答案 3 :(得分:2)

Sorta结合前两个答案,你可以这样做:

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并不重要,它“看起来”就像一列。我的意思是,系列是一维的,而不是两个,但你明白了......

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