问题 将列表转换为1列熊猫数据帧


我有一个包含许多行的文件。我正在阅读每一行,分割每个单词/数字并存储在列表中。在此之后,我试图将此列表转换为1列熊猫数据帧。

但是在运行我的代码后,我只得到一行满是列表。我需要的是 1列,行数可变 有一些价值。

这是我写的代码片段:

for line1 in file:
    test_set=[]

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

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

我的 产量 是这样的:

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

但我想要的是

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

有什么建议我做错了或者我该如何实现?谢谢。

输入数据样本代码段

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

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

.
.
.

11591
2017-08-21 10:36


起源

你可以发布你的输入数据的样子,它可能会被解析或拆分成df会更快 - EdChum
检查我的新编辑! - HackCode


答案:


你想要这个:

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

没有必要将列表再次包装在另一个列表中,通过这样做,您可以有效地说明您的df数据是一个包含单个元素的列表,这是另一个列表。

编辑

查看输入数据,您只需加载它,然后将df构造为单列,如下所示:

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

现在转置df并执行列表理解,这将构建您的列表并使用它们连接它们 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

12
2017-08-21 10:41



谢谢你的答案,但现在它给出相同的输出,但只有这样的缠绕支架少 - 0 [1, 0, 0, 0, 0, 0, 1, 1, 1, 0] - HackCode
它仍然只是一排。 :/ - HackCode
如果您希望数据帧只有1行,那该怎么办? n 列? - FaCoffee
您只需转置结果即可 df = df.T - EdChum
Downvoter关心解释? - EdChum


这应该没问题:

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

test_set已经是一个列表,你不必遍历它,所以你可以将它作为一个值添加到pandas中。

print df1

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

2
2017-08-21 13:01



如果您希望数据帧只有1行,那该怎么办? n 列? - FaCoffee
@ CF84可以提供样本输入数据和预期输出。 - YOBA


结果我只需添加这个

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

但我仍然希望得到一个成本较低的答案,因为这也会增加复杂性的另一个因素或'n',这是不够好的。


1
2017-08-21 10:53



如果这是不正确的 test_set 是一个清单。请说明如何 test_set 好像 - joris
这应该没问题:df1 = DataFrame({'test_set':test_set}) - YOBA