2017-05-20 38 views
2

我有一个文本文件。文件中的每一行看起来是这样,但有不同的长度:如何从文本文件创建数据帧

negative فينو اهبل ابن اهبل 
positive فينو اهبل ابن اهبل 
neutral فينو اهبل ابن اهبل 

当我使用pandas.read_table它读成一列,我尝试转换文件到Excel或CSV,但还是将其转换为一列

我希望它是一个两列数据框,其中negative在其自己的列中,其余列在其他列中。

+0

是否总是'negative',或者你只是想在第一空间打破? –

+0

看看'pd.read_fwf' –

+0

没有3个数值正数,负数,中性数 –

回答

2

先读取整个文件转换成数据帧与单个列:

df = pd.read_csv('/path/to/file.txt', sep='~', header=None) 

产量:

In [50]: df 
Out[50]: 
          0 
0 negative aaa bbb ccc ddd 
1   positive qqq vvv 

现在我们可以分析它是这样的:

In [51]: df[['col1','col2']] = df.pop(0).str.extract(r'^([^\s]+)\s*(.*?)$', expand=True) 

In [52]: df 
Out[52]: 
     col1    col2 
0 negative aaa bbb ccc ddd 
1 positive   qqq vvv 

或:

In [65]: df[['col1','col2']] = df.pop(0).str.split(n=1, expand=True) 

In [66]: df 
Out[66]: 
     col1    col2 
0 negative aaa bbb ccc ddd 
1 positive   qqq vvv 
2

您可以构建自己的解析器,如:

代码:

def parse_my_file(filename): 
    with open(filename) as f: 
     for line in f: 
      yield line.strip().split(' ', 1) 

测试代码:

df = pd.DataFrame(parse_my_file('file1')) 
print(df) 

结果:

  0     1 
0 negative فينو اهبل ابن اهبل 
1 neutral فينو اهبل ابن اهبل 
2 positive فينو اهبل ابن اهبل 
+1

非常有趣的方法! – MaxU

+0

非常感谢,完美!我尝试过之前分裂,但从未使用收益,所以我得到了多个错误 –

1

输入:

from io import StringIO 

table = """ 
negative فينو اهبل ابن اهبل 
positive فينو اهبل ابن اهبل 
neutral فينو اهبل ابن اهبل 
negative فينو اهبل ابن اهبل 
negative فينو اهبل ابن اهبل 
negative فينو اهبل ابن اهبل 
""" 

读文件:

df_in = pd.read_fwf(StringIO(table),widths=[8,1000]) 
print(df_in) 

输出:

Unnamed: 0   Unnamed: 1 
0 negative فينو اهبل ابن اهبل 
1 positive فينو اهبل ابن اهبل 
2 neutral فينو اهبل ابن اهبل 
3 negative فينو اهبل ابن اهبل 
4 negative فينو اهبل ابن اهبل 
5 negative فينو اهبل ابن اهبل