读取csv文件pandas slice arrays

时间:2015-05-30 22:24:23

标签: python csv pandas

我是一个蟒蛇新手,我在阅读csv到熊猫并使用它时遇到了麻烦。这是我的csv文件:

A   B
1   56
2   76
3   23
4   45
5   54
6   65
7   22

我的python代码:

import numpy as np
import pandas as pd 
from math import exp
from math import sqrt

g = pd.DataFrame.from_csv('test.csv')

a = g.iloc[2:4,1]
print(a)

我收到以下错误:

IndexError: index 1 is out of bounds for axis 0 with size 1

我也尝试过:

a = g.iloc[2:4,'B']

以及用于定义列和行的许多其他排列。

当我打印g时,我得到以下内容:

             B
A             
2015-05-01  56
2015-05-02  76
2015-05-03  23
2015-05-04  45
2015-05-05  54
2015-05-06  65
2015-05-07  22

我无法理解为什么A和B没有对齐。

我只是使用这个例子,但一般来说我想读取大型csv文件,然后对矩阵的某些方面执行操作。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

首先DataFrame.from_csv虽然仍然支持,但最好使用顶级read_csv,因为它支持更多功能。

所以这个:

a = g.iloc[2:4,1]

是错误的语法,你想:

a = g.iloc[2:4]['A']

其次,默认情况下DataFrame.from_csv使用第一列作为索引,这就是为什么列'A'是您的索引,如果您通过了index_col=None,那么您将获得所需的结果:

In [6]:
pd.DataFrame.from_csv(file_path)

Out[6]:
    B
A    
1  56
2  76
3  23
4  45
5  54
6  65
7  22
In [7]:    
pd.DataFrame.from_csv(file_path, index_col=None)

Out[7]:
   A   B
0  1  56
1  2  76
2  3  23
3  4  45
4  5  54
5  6  65
6  7  22

正确的语法:

In [9]:   
df.iloc[2:4]['A']

Out[9]:
2    3
3    4
Name: A, dtype: int64

此外read_csv index_col的默认设置为None,因此如果您使用read_csv,则无法解决对齐问题。

请检查索引上的docs并选择。

修改

正如@Jeff所建议的那样,我总是同意Jeff,因为这种选择ix是典型的选择方法,但它的行为与iloc的不同之处在于它确实包含了与iloc不同的结束行选择。 {1}}:

In [10]:    
df.ix[2:4,'A']

Out[10]:
2    3
3    4
4    5
Name: A, dtype: int64

所以我不知道你想要选择哪一行,但要注意不同的语义。

<强>更新

请注意,.ix将来会被弃用,您可以使用.loc获得相同的结果:

In [202]:
df.loc[2:4,'A']

Out[202]:
2    3
3    4
4    5
Name: A, dtype: int64