我正在尝试按以下格式转换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
答案 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