从CSV fi获取值的总和

2024-05-23 17:37:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将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

Tags: 文件csv字典规则格式columnnanreader
2条回答
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

使用内置函数的单行程序是:

reader.stack().value_counts()

stack将数据帧透视成一个带有层次索引的序列,然后允许我们使用value_counts函数。这是必要的,因为数据帧不支持value_counts。你知道吗

请注意,这会计算值1的频率,该值出现在示例中。您可以很容易地过滤非字符串索引以获得预期的输出。你知道吗

相关问题 更多 >