我有一个CSV记录:
name,credits,email
bob,,test1@foo.com
bob,6.0,test@foo.com
bill,3.0,something_else@a.com
bill,4.0,something@a.com
tammy,5.0,hello@gmail.org
name
{
"bob": [
{ "credits": null, "email": "test1@foo.com"},
{ "credits": 6.0, "email": "test@foo.com" }
],
// ...
}
我目前的解决方案有点笨拙,因为它似乎只将pandas用作读取CSV的工具,但它生成了我预期的JSONish输出:
#!/usr/bin/env python3
import io
import pandas as pd
from pprint import pprint
from collections import defaultdict
def read_data():
s = """name,credits,email
bob,,test1@foo.com
bob,6.0,test@foo.com
bill,3.0,something_else@a.com
bill,4.0,something@a.com
tammy,5.0,hello@gmail.org
"""
data = io.StringIO(s)
return pd.read_csv(data)
if __name__ == "__main__":
df = read_data()
columns = df.columns
index_name = "name"
print(df.head())
records = defaultdict(list)
name_index = list(columns.values).index(index_name)
columns_without_index = [column for i, column in enumerate(columns) if i != name_index]
for record in df.values:
name = record[name_index]
record_without_index = [field for i, field in enumerate(record) if i != name_index]
remaining_record = {k: v for k, v in zip(columns_without_index, record_without_index)}
records[name].append(remaining_record)
pprint(dict(records))
有没有办法在当地的熊猫(和numpy)身上做同样的事情?