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
答案 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
基本上发生的情况是,如果从数据框中提取行或列,则会得到一个显示为列的系列。如果您执行ser
或ser.T
并不重要,它“看起来”就像一列。我的意思是,系列是一维的,而不是两个,但你明白了......
所以无论如何,您可以将系列转换为一行数据帧。 (我将名称从“行”改为“ser”以强调上面发生的事情。)关键是你必须先转换为数据帧(默认情况下是一个列),然后转置它。