Python 在数据帧中循环时出现意外结果

Python 在数据帧中循环时出现意外结果,python,pandas,dataframe,Python,Pandas,Dataframe,我将csv的内容加载到数据帧 data = pd.read_csv("census.csv") 然后我检查数据大小 print( data.size) --> 633108 然后我循环遍历数据帧 counter = 0 for index, row in data.iterrows(): counter += 1 然后我再次检查计数器和数据大小 print( counter) --> 45222 print( data.size) --> 633108 他们应该

我将csv的内容加载到数据帧

data = pd.read_csv("census.csv")
然后我检查数据大小

print( data.size) --> 633108
然后我循环遍历数据帧

counter = 0
for index, row in data.iterrows():
    counter += 1
然后我再次检查计数器和数据大小

print( counter) --> 45222
print( data.size) --> 633108

他们应该是一样的,我不明白为什么他们不一样。我将感谢任何帮助

size
不是要使用的正确属性<代码>大小是元素的总数

df = pd.DataFrame(np.zeros((3, 4)))
df.size

12
如果只有一列,
size
将恰好正确

df.iloc[:, [0]].size

3
相反,使用
df.shape[0]
获取行数

df.shape[0]

3

我更喜欢
len(df)
,因为它比
df.shape[0]

%timeit df.shape[0]
%timeit len(df)

1.58 µs ± 47.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
916 ns ± 21 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
您可以使用
len(df.columns)

对于获取形状元组,它相当于同时获取
df.index
len
df.column
。避免转到
values
,因为它是
shape
属性,因为形成
values
数组的调用开销太大。除非你需要这个数组来做其他事情

%timeit df.shape
%timeit df.values.shape
%timeit len(df), len(df.columns)

1.58 µs ± 75.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
5.78 µs ± 198 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
1.65 µs ± 35 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Think
计数器
应该是
数据。形状[0]
,因为您正在迭代它的行。
数据。形状
将返回行x列。是的,有13列+1个索引。14x45222=633108。非常感谢您的快速回复。两个答案都很有帮助。
%timeit df.shape[1]
%timeit len(df.columns)

1.65 µs ± 67.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
679 ns ± 34.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit df.shape
%timeit df.values.shape
%timeit len(df), len(df.columns)

1.58 µs ± 75.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
5.78 µs ± 198 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
1.65 µs ± 35 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)