从CSV文件中获取值的总和

时间:2015-10-12 23:08:05

标签: python csv pandas

我正在尝试按以下格式转换CSV文件:

   Unnamed: 0 Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4 Unnamed: 5  
0         HDB          1        NaN        NaN        NaN        NaN   
1         NaN        NaN        NaN        NaN        NaN        NaN   
2         NaN        NaN        NaN        NaN        NaN        NaN   
3         HDB          1        NaN        NaN        NaN        NaN   
4         NaN        NaN        NaN        NaN        NaN        NaN   
5         NaN        NaN        NaN        NaN        NaN        NaN   
6         NaN        NaN        NaN        NaN        NaN        NaN   
7         LPO          1       VLPO          1        NaN        NaN   
8         LPO          1        NaN        NaN        NaN        NaN   
9         LGP          1        NaN        NaN        NaN        NaN   
10        NaN        NaN        NaN        NaN        NaN        NaN  

到一个说

的CSV文件
HDB 2
LPO 2
LGP 1
VLPO 1

首先尝试创建字典,然后制定一些可以为现有字符串添加数字的规则是否最简单?

如果是这样,会有什么样的功能?

到目前为止,我试过

import pandas as pd

reader = pd.read_csv('Book1.csv')

d={}
for column in reader:
    d[column[0]]=column[1:]
print d

2 个答案:

答案 0 :(得分:3)

使用pandas内置函数的单行代码是:

reader.stack().value_counts()

stack将DataFrame转换为具有分层索引的系列,然后允许我们使用value_counts函数。这是必要的,因为DataFrames不支持value_counts

请注意,这会计算示例中显示的值1的频率。您可以轻松过滤非字符串索引以获得预期的输出。

答案 1 :(得分:0)

temp = []
d = {}
with open('data', 'r') as f:
    for line in f:
        line=line.strip()
        # remove first column
        line = line.split(',')[1:]
        # get rid of "Nan"
        line = [x for x in  line if x != "NaN"]
        # put data into sublists of 2
        if line:
            line =  [line[i:i + 2] for i in range(0, len(line), 2)]
            temp.extend(line)

# unpack sublists and put into dictionary 
for  el in temp:
    k, v = el
    if k in d.keys():
        d[k]  += int(v)
    else:
        d[k] = int(v)

with open('data.csv', 'w', newline='') as fp:
    a = csv.writer(fp, delimiter=',')
    for t in d.items():
        a.writerows([t])

data.csv contains now:

LGP,1
HDB,2
VLPO,1
LPO,2