我将 csv 的内容加载到数据框中。
data = pd.read_csv("census.csv")
然后我检查数据大小
print( data.size) --> 633108
然后我循环遍历 DataFrame
counter = 0
for index, row in data.iterrows():
counter += 1
然后我再次检查计数器和数据大小。
print( counter) --> 45222
print( data.size) --> 633108
它们应该是相同的,我不明白为什么它们不一样。我会感谢任何帮助。
最佳答案
size
不是正确使用的属性。 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)
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)将其复制到第二维
%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)
对于抓取形状元组,相当于抓取df.index
和df.column
的len
。避免使用 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)
关于python - 循环遍历 pandas DataFrame 时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45927228/