无法将以下空格分隔的数据文件导入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 "]
有什么想法吗? 感谢先进的帮助
答案 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_fwf
。
http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.read_fwf.html
答案 2 :(得分:1)
您可以使用pandas read_csv
的sep
参数:
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....]