2016-11-16 66 views
5

Hàng đơn của một DataFrame in giá trị cạnh nhau, tức là column_name sau đó columne_value trong một dòng và dòng tiếp theo chứa cột column_name tiếp theo và columne_value. Ví dụ, mã dưới đâyPandas DataFrame: Cách in một hàng theo chiều ngang?

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 

Output cho hàng đầu tiên được đưa ra khi

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

Có cách nào để có mỗi hàng in theo chiều ngang và bỏ qua những kiểu dữ liệu, Tên? Ví dụ đối với dòng đầu tiên:

0 1 2 
100 200 300 

Trả lời

5

sử dụng phương pháp to_frame sau đó transpose với 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 

lưu ý:
này tương tự như @ câu trả lời Johne ở chỗ phương pháp to_frame là cú pháp đường xung quanh pd.DataFrame.

Trong thực tế, nếu chúng ta 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 

điểm cần _constructor_expanddim

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

nào bạn có thể thấy chỉ đơn giản trả về callable DataFrame

+0

@JohnE Tôi đã chỉnh sửa bài đăng của mình. – piRSquared

+0

Cảm ơn! Đó là một sự phục hồi tuyệt vời ;-) Và giải thích rất tốt về sự khác biệt. – JohnE

3

Sử dụng các tài sản chuyển vị:

df.T 

    0 1 2 
0 100 200 300 
+0

gì nếu df có nhiều hàng như df = pd.DataFrame ([[100,200,300], [400.500.600]]). Làm thế nào mỗi hàng có thể được in như thế? – gmsi

+0

Sửa đổi OP của bạn, bạn phản ánh rằng một phần của câu hỏi và đầu ra dự kiến ​​của bạn với một khung dữ liệu như vậy – Boud

+0

Đã cập nhật câu hỏi. Cảm ơn – gmsi

3

Nó có vẻ như cần có một câu trả lời đơn giản hơn với điều này, nhưng cố gắng biến nó thành DataFrame khác với một hàng.

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

Sorta kết hợp hai câu trả lời trước đó, bạn có thể làm:

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 

Về cơ bản những gì xảy ra ở đây là nếu bạn trích xuất một hàng hoặc cột từ một dataframe, bạn nhận được một loạt mà sẽ hiển thị như một cột . Và không quan trọng nếu bạn làm ser hoặc ser.T, nó "trông" giống như một cột. Ý tôi là, chuỗi là một chiều, không phải hai, nhưng bạn có được điểm ...

Vì vậy, dù sao, bạn có thể chuyển đổi chuỗi thành một khung dữ liệu với một hàng. (Tôi đã thay đổi tên từ "hàng" thành "ser" để nhấn mạnh những gì đang xảy ra ở trên.) Điều quan trọng là bạn phải chuyển đổi thành một khung dữ liệu trước tiên (sẽ là cột theo mặc định), sau đó chuyển đổi nó.

+0

Tôi thường sử dụng tái thiết để giải quyết vấn đề. cộng một từ tôi. – piRSquared

Các vấn đề liên quan