以两种方式求和熊猫数据帧中的级数



我正在训练熊猫以及如何在DataFrame中求和一个系列。我可以使用列表和普通变量两种方法。代码就像

import pandas as pd
url = 'http://bit .ly/imdbratings'
df = pd.read_csv(url , chunksize=250)
result = []
for chunk in df:
result.append(sum(chunk['duration']))
print(sum(result))

代码运行良好,输出为118439

当使用变量而不是像那样的列表时

import pandas as pd
url = 'http://bit .ly/imdbratings'
df = pd.read_csv(url , chunksize=250)
total = 0
for chunk in df:
total += sum(chunk['duration'])
print(total)

输出与118439 相同

**问题是当在像这样的代码中尝试这两种方法时

import pandas as pd
url = 'http://bit .ly/imdbratings'
df = pd.read_csv(url, chunksize=250)
result = []
for chunk in df:
result.append(sum(chunk['duration']))
print(sum(result))
total = 0
for chunk in df:
total += sum(chunk['duration'])
print(total)

我得到了第一种方法的结果,但total变量得到了0。有什么想法吗?当我把这两种方法结合在一起时,为什么我得了0?

**删除url中的空格。

块在调用时正在更改。在我看来,这是一种出乎意料的行为,必须进行调查。

如果您为每次迭代打印一个数字,您可以看到您没有输入第二个代码块,这就是为什么total变量保持为零的原因。

尝试运行:

url = 'http://bit .ly/imdbratings'
df = pd.read_csv(url, chunksize=250)
print('Test Chunk 1')
for i, chunk in enumerate(df):
print(i)
#print(chunk)
print('Test Chunk 2')
for i, chunk in enumerate(df):
print(i)
#print(chunk)
>>> Test Chunk 1
0
1
2
3
Test Chunk 2

编辑

多亏了这篇文章,我找到了一个如何读取数据并将其存储为pandas DataFrame的解决方案。

添加了一行来连接所有块。然后你就不用再在大块上循环了。

url = 'http://bit .ly/imdbratings'
df = pd.read_csv(url, chunksize=250)
df = pd.concat(df, ignore_index=True) # added line here
total = df['duration'].sum()
print(total)

一般来说,这运行良好。。

import pandas as pd
df = pd.read_csv('http://bit .ly/imdbratings', chunksize=250)
result = []
total = 0
for chunk in df:
print(sum(chunk['duration']), len(chunk['duration']))
result.append(sum(chunk['duration']))
total += sum(chunk['duration'])
print('-'*10)
print(sum(result))
print(total)

最新更新