我有一个名为data的文件,如下所示:
Some Text Information (lines 1-6 in file)
1 22 23
2 44 44
3 55 55
4 66 66
5 77 77
我想要实现的是这样的:
[[ 22. 23.]
[ 44. 44.]
[ 55. 55.]
[ 66. 66.]
[ 77. 77.]]
我遇到的问题是我使用的代码无法正确地从文件中拆分数据。最终看起来像这样:
[ 1 22 23
0 2 44 44
1 3 55 55, Empty DataFrame
Columns: [1 6734 1453]
Index: [], 1 22 23
2 4 44 44
3 5 55 55
4 6 66 66
5 7 77 77
EOF]
这是我正在使用的代码:
def loadFile(filename):
df1 = pd.read_fwf(filename, skiprows=6)
df1 = np.split(df, [2,2])
print('The data points:\n {}'.format(df1[:5]))
我了解split函数的参数。例如,[2,2]应该从我的数据帧创建两个子数组,并且我的轴为0。但是,为什么它不能正确地拆分该数组?
答案 0 :(得分:0)
不要使用read_fwf
,让大熊猫弄清楚表的结构:
df = pd.read_csv("yourfile", skiprows=6, header=None, sep='\s+')
答案 1 :(得分:0)
您可以将文件读入pandas
dataFrame并从中访问values
属性。假定“某些文本信息”不是header
:
import pandas as pd
df = pd.read_table(filepath, sep='\t', index_col= 0, skiprows = 6, header = None)
df.values # gives you the numpy ndarray
这应将第一列用作index
。另外,您可能需要删除sep
参数,以便让 read_table 弄清楚。另外,请尝试使用其他分隔符。如果您在数据中获得行索引,请尝试切片以获得所需的结果。使用类似的东西:
df.iloc[:,1:].values
答案 2 :(得分:0)
详细说明ManKind_008的答案:
您的显式行号是问题所在。熊猫会将其解释为有效数据。 使用ManKinds解决方案确实可以正确设置索引列,但是由于行号从零开始,因此最终得到一个DataFrame,如:
pd.read_fwf('test.csv', header=None, index_col=0, skiprows=6)
1 2
0
1 22 23
2 44 44
3 55 55
4 66 66
5 77 77
相反,我建议您使用以下方法读取所有数据:
pd.read_fwf('test.csv', header=None, skiprows=6).iloc[:, 1:]
1 2
0 22 23
1 44 44
2 55 55
3 66 66
4 77 77
这使您拥有了所需的东西。 iloc
调用将忽略数据的第一行(您的行号)。
从这里df.values
命令将为您提供:
array([[22, 23],
[44, 44],
[55, 55],
[66, 66],
[77, 77]])
如果您不需要np.array,则可以使用list()
函数将其显式转换为列表。