2015-08-21 39 views
9

Tôi có một tệp có nhiều dòng. Tôi đang đọc từng dòng, tách từng từ/số và lưu trữ trong một danh sách. Sau này, tôi đang cố gắng chuyển đổi danh sách này thành một Dataframe panda 1 cột.Chuyển đổi danh sách thành một khung dữ liệu gấu trúc 1 cột

Tuy nhiên sau khi chạy mã, tôi chỉ nhận được một hàng đầy đủ các danh sách. Những gì tôi cần là 1 cột có số hàng biến đổi với một số giá trị.

Dưới đây là đoạn mã tôi đã viết:

for line1 in file: 
    test_set=[] 

    test_set.append(next(file).split()) 

    df1 = DataFrame({'test_set': [test_set]}) 

My đầu ra là một cái gì đó như:

   test_set 
0 [[1, 0, 0, 0, 0, 0, 1, 1, 1, 0]] 

Nhưng những gì tôi muốn là:

test_set 
0 1 
1 0 
2 0 
3 0 
4 0 
5 0 
6 1 
7 1 
8 1 
9 0 

Bất kỳ đề xuất những gì tôi làm sai hoặc làm thế nào tôi có thể thực hiện điều này? Cảm ơn.

đoạn Input Dữ liệu mẫu

id1 id2 id3 id4 
0 1 0 1 
1 1 0 0 

id10 id5 id6 id7 
1 1 0 1 
1 0 0 1 

. 
. 
. 
+1

Bạn có thể đăng dữ liệu đầu vào của mình như thế nào, có khả năng nó có thể được phân tích cú pháp hoặc chia thành df sẽ nhanh hơn – EdChum

+0

Kiểm tra chỉnh sửa mới của tôi! – HackCode

Trả lời

1

Hóa ra tôi chỉ phải thêm này

df1 = DataFrame({'test_set': value for value in test_set}) 

Nhưng tôi vẫn hy vọng để có được một câu trả lời ít tốn kém vì điều này cũng sẽ làm tăng mức độ phức tạp bởi một yếu tố hoặc 'n' đó là không đủ tốt.

+0

Điều này không thể chính xác nếu 'test_set' là một danh sách. Vui lòng cho biết cách 'test_set' trông giống như – joris

+0

Điều này sẽ ổn: df1 = DataFrame ({'test_set': test_set}) – YOBA

11

Bạn muốn điều này thay vì:

df1 = DataFrame({'test_set': test_set})

Không cần phải quấn danh sách một lần nữa trong danh sách khác, bằng cách đó bạn có hiệu quả ghi rõ dữ liệu df của bạn là một danh sách với một phần tử đơn lẻ là một danh sách khác.

EDIT

nhìn vào dữ liệu đầu vào của bạn, bạn chỉ có thể tải nó và sau đó xây dựng df của bạn như là một cột duy nhất như vậy:

In [134]: 
# load the data 
import io 
import pandas as pd 
t="""id1 id2 id3 id4 
0 1 0 1 
1 1 0 0""" 
df = pd.read_csv(io.StringIO(t), sep='\s+') 
df 

Out[134]: 
    id1 id2 id3 id4 
0 0 1 0 1 
1 1 1 0 0 

Bây giờ transpose df và thực hiện một danh sách hiểu, điều này sẽ tạo danh sách của bạn và kết nối chúng bằng cách sử dụng pd.concat:

In [142]:  
pd.concat([df.T[x] for x in df.T], ignore_index=True) 

Out[142]: 
0 0 
1 1 
2 0 
3 1 
4 1 
5 1 
6 0 
7 0 
dtype: int64 
+0

Cảm ơn câu trả lời của bạn nhưng bây giờ nó đưa ra cùng một đầu ra nhưng chỉ có ít vòng bọc quanh niềng răng như thế này - '0 [1, 0, 0, 0, 0, 0, 1, 1, 1, 0]' – HackCode

+0

chỉ một hàng.:/ – HackCode

+0

Nếu bạn muốn khung dữ liệu chỉ có 1 hàng và cột 'n' thì sao? – FaCoffee

2

này nên được tốt:

df1 = DataFrame({'test_set': test_set}) 

test_set đã là một danh sách, bạn không cần phải vòng qua nó, do đó bạn có thể thêm nó như là một giá trị trong gấu trúc.

print df1 

test_set 
0 1 
1 0 
2 0 
3 0 
4 0 
5 0 
6 1 
7 1 
8 1 
9 0 
+0

Nếu bạn muốn dataframe chỉ có 1 hàng và cột' n' thì sao? – FaCoffee

+0

@ CF84 bạn có thể cung cấp dữ liệu nhập mẫu và đầu ra dự kiến ​​không .. – YOBA

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