我是一个蟒蛇新手,我在阅读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文件,然后对矩阵的某些方面执行操作。
任何帮助将不胜感激。
答案 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