使用空格分隔符将文本文件导入python中的csv

时间:2015-11-29 08:06:33

标签: python csv pandas

无法将以下空格分隔的数据文件导入python并将它们拆分为我可以使用的数据框。 原始数据文件如下所示:

3300 0.272 0.302  69 153 21  4 31 104  22  80  4  3 1 0 0 0 "Andre Dawson     "
2600 0.269 0.335  58 111 17  2 18  66  39  69  0  3 1 1 0 0 "Steve Buchele    "

import pandas as pd
data = pd.read_csv('../data/ABRMdata', header=None)
split_text = []
for line in data:
    split_text.append(line)

return split_text

我只返回[0] 但我希望在列表列表中返回数据

[3300,0.272,0.302,69,153,21,4,31,104,22,80,4,3,1, 0,0,0,"Andre Dawson  "]
[2600,0.269,0.335,58,111,17,2,18,66,39,69, 0,3,1,1,0,0,"Steve Buchele    "]

有什么想法吗? 感谢先进的帮助

4 个答案:

答案 0 :(得分:1)

你需要使用熊猫吗?

这段代码可以让你在熊猫之外开始。 (它不符合您的规格)

import csv

with open('/Users/toasteez/desktop/file.txt', 'r') as csvfile:
    w = csv.reader(csvfile)
    for line in w:
        newline = str.replace(line[0],' ',',')
        print(newline)

答案 1 :(得分:1)

看起来你实际上可能有一个不是空格分隔的文件,而是一个用字段固定的文件。如果是这种情况,请查看pandas.read_fwfhttp://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.read_fwf.html

答案 2 :(得分:1)

您可以使用pandas read_csvsep参数:

import pandas as pd
from io import StringIO

data = """
3300 0.272 0.302  69 153 21  4 31 104  22  80  4  3 1 0 0 0 "Andre Dawson     "
2600 0.269 0.335  58 111 17  2 18  66  39  69  0  3 1 1 0 0 "Steve Buchele    "
"""

df = pd.read_csv(StringIO(data), sep='\s+', header=None)


In [87]: df
Out[87]: 
     0      1      2   3    4   5   6   7    8   9   10  11  12  13  14  15  \
0  3300  0.272  0.302  69  153  21   4  31  104  22  80   4   3   1   0   0   
1  2600  0.269  0.335  58  111  17   2  18   66  39  69   0   3   1   1   0   

   16                 17  
0   0  Andre Dawson       
1   0  Steve Buchele   

编辑

或者您可以将delim_whitespace设置为True

df = pd.read_csv(StringIO(data), delim_whitespace=True, header=None)

In [440]: df
Out[440]:
     0      1      2   3    4   5   6   7    8   9   10  11  12  13  14  15  \
0  3300  0.272  0.302  69  153  21   4  31  104  22  80   4   3   1   0   0
1  2600  0.269  0.335  58  111  17   2  18   66  39  69   0   3   1   1   0

   16                 17
0   0  Andre Dawson
1   0  Steve Buchele

答案 3 :(得分:1)

正如David所说,pandas base_region&可用于创建数据框,可以使用read_fwf和其他数据结构转换为python字典。

to_dict()

是的,它在最后一个字段之间的空间作为分隔符,以避免使用In [30]: df = pd.read_fwf("filefor",header=None) In [31]: df Out[31]: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \ 0 3300 0.272 0.302 69 153 21 4 31 104 22 80 4 3 1 0 0 1 2600 0.269 0.335 58 111 17 2 18 66 39 69 0 3 1 1 0 16 17 18 19 0 0 "Andre Dawson " 1 0 "Steve Buchele " In [32]: df.to_dict() Out[32]: {0: {0: 3300, 1: 2600}, 1: {0: 0.27200000000000002, 1: 0.26899999999999996}, 2: {0: 0.30199999999999999, 1: 0.33500000000000002}, 3: {0: 69, 1: 58}, 4: {0: 153, 1: 111}, 5: {0: 21, 1: 17}, 6: {0: 4, 1: 2}, 7: {0: 31, 1: 18}, 8: {0: 104, 1: 66}, 9: {0: 22, 1: 39}, 10: {0: 80, 1: 69}, 11: {0: 4, 1: 0}, 12: {0: 3, 1: 3}, 13: {0: 1, 1: 1}, 14: {0: 0, 1: 1}, 15: {0: 0, 1: 0}, 16: {0: 0, 1: 0}, 17: {0: '"Andre', 1: '"Steve'}, 18: {0: 'Dawson', 1: 'Buchele'}, 19: {0: '"', 1: '"'}}

其他ds用途

widths=[1,5....]