我有一个包含许多行的文件.我正在读每行,分割每个单词/数字并存储在列表中.在此之后,我试图将此列表转换为1列熊猫数据帧.
但是在运行我的代码后,我只得到一行满是列表.我需要的是1列,可变行数和一些值.
这是我写的代码片段:
for line1 in file:
test_set=[]
test_set.append(next(file).split())
df1 = DataFrame({'test_set': [test_set]})
Run Code Online (Sandbox Code Playgroud)
我的输出是这样的:
test_set
0 [[1, 0, 0, 0, 0, 0, 1, 1, 1, 0]]
Run Code Online (Sandbox Code Playgroud)
但我想要的是:
test_set
0 1
1 0
2 0
3 0
4 0
5 0
6 1
7 1
8 1
9 0
Run Code Online (Sandbox Code Playgroud)
有什么建议我做错了或者我该如何实现?谢谢.
输入数据样本代码段
id1 id2 id3 id4
0 1 0 1
1 1 0 0
id10 id5 id6 id7
1 1 0 1
1 0 0 1
.
.
.
Run Code Online (Sandbox Code Playgroud)
EdC*_*ica 13
你想要这个:
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
Run Code Online (Sandbox Code Playgroud)
现在转置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
Run Code Online (Sandbox Code Playgroud)
这应该没问题:
df1 = DataFrame({'test_set': test_set})
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
结果我只需要添加这个
df1 = DataFrame({'test_set': value for value in test_set})
Run Code Online (Sandbox Code Playgroud)
但我仍然希望得到一个成本较低的答案,因为这也会增加另一个因素或“n”的复杂性,而这还不够好。