我有以下形式的csv文件:
'userid','metric name (1-10)','value'
列“度量标准名称”具有超过10个不同的度量标准,因此相同的用户标识将具有与之关联的多个行。我想要完成的事情是这样的:
'userid1', 'metric name 1'='value1', 'metric name 2'='value2', 'metric name 3'='value3'... 'metric name 10' = 'value10'
每个用户标识的单行,其中包含与该用户关联的所有指标和值(k / v对)
我开始使用枢轴,但该功能并没有真正完成我需要它...
import pandas as pd
data=pd.read_csv('bps.csv')
data.pivot('entityName', 'metricName', 'value').stack()
我认为我需要通过用户对数据集进行迭代,然后获取与该用户关联的指标,并在每次迭代期间构建度量k / v对,然后再转到新用户。我做了一个非常彻底的搜索互联网的工作,但我没有找到我正在寻找的确切内容。如果有一个我可以使用的简单库,请告诉我。
答案 0 :(得分:0)
这里只有一个使用标准python的解决方案,而不是任何框架。
从以下数据文件开始:
id1,name,foo
id1,age,10
id2,name,bar
id2,class,example
id1,aim,demonstrate
您可以执行以下代码:
separator = ","
userIDKey = "userID"
defaultValue = "No data"
data = {}
#collect the data
with open("data.csv", 'r') as dataFile:
for line in dataFile:
#remove end of line character
line = line.replace("\n", "")
userID, fieldName, value = line.split(separator)
if not userID in data.keys():
data[userID] = {userIDKey:userID}
data[userID][fieldName] = value
#retrieve all the columns header in use
columnsHeaders = set()
for key in data:
dataset = data[key]
for datasetKey in dataset :
columnsHeaders.add(datasetKey)
columnsHeaders.remove(userIDKey)
columnsHeaders = list(columnsHeaders)
columnsHeaders.sort()
def getValue(key, dic):
if key in dic.keys():
return dic[key]
else:
return defaultValue
#then export the result
with open("output.csv", 'w') as outputFile:
#export first line of header
outputFile.write(userIDKey)
for header in columnsHeaders:
outputFile.write(", {0}".format(header))
outputFile.write("\n")
#and export each line
for key in data:
dataset = data[key]
outputFile.write(dataset[userIDKey])
for header in columnsHeaders:
outputFile.write(", {0}".format(getValue(header, dataset)))
outputFile.write("\n")
然后你得到以下结果:
userID, age, aim, class, name
id1, 'age'='10', 'aim'='demonstrate', 'class'='No data', 'name'='foo'
id2, 'age'='No data', 'aim'='No data', 'class'='example', 'name'='bar'
我认为如果需要,我们可以轻松修改此代码以符合您的目标。
希望它有所帮助。 亚瑟。