Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对CSV文件的每列求和_Python_Powershell - Fatal编程技术网

Python 对CSV文件的每列求和

Python 对CSV文件的每列求和,python,powershell,Python,Powershell,我有一个包含32列标题的大型CSV文件。我想对每列求和,结果是每列标题的32个单独的求和。我可以访问python和powershell。任何帮助都将不胜感激 我得到的最多的是这个站点:您可以在pandas中使用read\u csv来读取文件,然后在数据帧上使用sum() import pandas as pd filename = r'folder/file.txt' df = pd.read_csv(filename) total = df.sum() 仅在此示例数据文件上使用内置项的简单

我有一个包含32列标题的大型CSV文件。我想对每列求和,结果是每列标题的32个单独的求和。我可以访问python和powershell。任何帮助都将不胜感激


我得到的最多的是这个站点:

您可以在pandas中使用
read\u csv
来读取文件,然后在数据帧上使用
sum()

import pandas as pd

filename = r'folder/file.txt'
df = pd.read_csv(filename)
total = df.sum()

仅在此示例数据文件上使用内置项的简单方法:

#! /usr/bin/env python
from __future__ import print_function

sep = ';'
with open('32_numeric_columns.csv', 'rt') as f:
    columns = f.readline().strip().split(sep)
    rows = [0] * len(columns)
    for line in f.readlines():
        data = line.strip().split(sep)
        for i, cell in enumerate(data, start=0):
            rows[i] += float(cell)


print(columns)
print(rows)
a0;a1;a2;a3;a4;a5;a6;a7;a8;a9;b0;b1;b2;b3;b4;b5;b6;b7;b8;b9;c0;c1;c2;c3;c4;c5;c6;c7;c8;c9;d0;d1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
在此数据文件上:

#! /usr/bin/env python
from __future__ import print_function

sep = ';'
with open('32_numeric_columns.csv', 'rt') as f:
    columns = f.readline().strip().split(sep)
    rows = [0] * len(columns)
    for line in f.readlines():
        data = line.strip().split(sep)
        for i, cell in enumerate(data, start=0):
            rows[i] += float(cell)


print(columns)
print(rows)
a0;a1;a2;a3;a4;a5;a6;a7;a8;a9;b0;b1;b2;b3;b4;b5;b6;b7;b8;b9;c0;c1;c2;c3;c4;c5;c6;c7;c8;c9;d0;d1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1
收益率:

['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'd0', 'd1']
[10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0]
在我的机器上处理一个包含1280000000字节数据的大文件大约需要5分钟才能生成:

$> time ./so_csv_adder.py
['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'd0', 'd1']
[20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0, 20000000.0]

real    4m47.374s
user    4m43.748s
sys 0m2.545s
熊猫无疑是一条必经之路。这两行代码将打印出列的总和。如果您在windows上,请使用“\”指定路径。我假设您的csv文件使用分号作为分隔符(如果是逗号,则使用sep=”,如果是制表符,则使用sep=“\t”)

如果要将结果写入文件,请使用:

import pandas as pd
df = pd.read_csv(r'my_path_to_file/my_file.csv', sep=';').sum()
df.to_csv(r'my_path_to_file/my_file_sum.csv')
由于我不确定您希望输出的格式,我将把它留给您

在powershell(或Linux/Mac OS等)中,您应该能够安装优秀的命令行软件包(该软件包在大型CSV文件上运行速度非常快,并且还具有Windows安装程序)

您可以使用CSVFIX
summary
命令生成每列的总和:

csvfix摘要-总和1:32 filename.csv

这将为您提供每列总和的单行摘要:

“43”、“21”、“425”、“1092”和[…]


如果文件有标题行,不要忘记也添加
-ifn
标志以忽略第一行。

导入excel并在那里执行?它不是程序化的,但是如果你只需要做一次,它可能是最快的方式。文件超过1GB。无法加载到Excel中。只需使用一个简单的
for
循环,就不需要将整个文件读入内存。我的意思是,我对python非常缺乏经验,不知道如何执行链接中提供的方法。我不知道如何跳过“groupby”部分。@specmer:因此,如果您还没有python方面的经验,我下面的回答应该可以帮助您继续。无需导入,无需框架,您可以轻松消化所述的千兆字节数据;-)我们都是从没有经验开始的,知道这是一种我们有时会忘记的力量……所以像这样的事情:df.sum().compute(),我做错了什么<[1]中的代码>将熊猫作为pd导入[2]:文件名=r'C:\Temp\Symphony\output.csv'In[3]:df=pd.read\u csv(r)-----------------------------------------------------------------------------------------名称错误回溯(最近一次调用)In()--->1 df=pd.read\u csv(r)名称错误:名称“r”未在[4]中定义[5]中的:df=pd.read\u csv('C:\Temp\Symphony\output.csv'):total=df.sum()[6]:
df=pd.read\u csv(r)
应该是
df=pd.read\u csv(文件名)
.ah。明白了。一旦我键入
total=df.sum()
我就没有得到任何输出
total
是一个系列。尝试打印(总计)。或者,
Total['A']
,其中'A'是一个列名。因此,我几乎把一些东西组合在一起,这就是我得到最佳结果的原因:
ipython In[1]:导入dask.dataframe作为[2]中的dd:df=dd.read\u csv('So.csv',sep=','))In[3]:df.head()Out[3]:In[5]:df.sum().compute()Out[5]:
Vincent Claes和我的代码之间的区别在于我的代码包含了标题。@specmer如果要包含标题,只需运行代码保存到文件中即可。在此文件中,您将看到具有相应值的列名。