如何将表结构数据转换为python/pandas中的dict/graph结构,以用于D3中的强制图?

如何将表结构数据转换为python/pandas中的dict/graph结构,以用于D3中的强制图?,python,pandas,d3.js,graph,dataframe,Python,Pandas,D3.js,Graph,Dataframe,我一直在转换此csv: "","Destination","Source" "1","New York","Chicago" "2","Denver","Chicago" "3","Los Angeles","Boston" "4","Colorado","Indianapolis" 以这样的格式: [ { "name": "Chicago", "target": [ 1, 2 ]

我一直在转换此csv:

"","Destination","Source"
"1","New York","Chicago"
"2","Denver","Chicago"
"3","Los Angeles","Boston"
"4","Colorado","Indianapolis"
以这样的格式:

[
    {
        "name": "Chicago",
        "target": [
            1,
            2
        ]
    },
    {
        "name": "New York",
        "target": []
    },
    {
        "name": "Denver",
        "target": []
    },
    {
        "name": "Los Angeles",
        "target": []
    },
    {
        "name": "Boston",
        "target": [
            3
        ]
    },
    {
        "name": "Indianapolis",
        "target": [
            6
        ]
    },
    {
        "name": "Colorado",
        "target": []
    }
]
其中target是与其连接的节点的索引号

我正试图用python来实现这一点,因为我想将这些数据发布到DB中,并从前端提取数据来完成D3的工作

我也尝试过熊猫,但不能用这种形式。现在很沮丧!任何帮助都将不胜感激

谢谢大家!

您可以使用,但在需要创建正确的
df
之前:

df['nan'] = 'none'
df['Source'] = df.Source.astype(str)

df.reset_index(inplace=True)

df = pd.lreshape(df, {'target': ['index', 'nan'], 'name': ['Destination', 'Source']})
print (df)
  target          name
0      1       Chicago
1      2       Chicago
2      3        Boston
3      4  Indianapolis
4   none      New York
5   none        Denver
6   none   Los Angeles
7   none      Colorado

df1 = df.groupby('name')['target']
        .apply(lambda x: [] if (x == 'none').all() else x.tolist())
        .reset_index(name='target'))

print (df1)
           name  target
0        Boston     [3]
1       Chicago  [1, 2]
2      Colorado      []
3        Denver      []
4  Indianapolis     [4]
5   Los Angeles      []
6      New York      []

检查这是否符合你的要求

import csv
reader=csv.reader(open("data.csv","rb"))
next(reader)
x,y={},set()
for r in reader:
    a,b,c=r
    x.update({a:c})
    y.update([b,c])

anss =dict((new_key,[k for k,v in x.iteritems() if new_key==v]) for new_key in y)
result=[{"name":k,"target":v} for k,v in anss.iteritems()]

为什么您的
目标
是空列表?就像纽约的名字一样,目标是1Hi,@Euler,谢谢你的评论,我在CSV文件头中犯了一个错误,我现在已经更正了。谢谢如果我或
Eular
的答案有帮助,请不要忘记并投票表决。谢谢
import csv
reader=csv.reader(open("data.csv","rb"))
next(reader)
x,y={},set()
for r in reader:
    a,b,c=r
    x.update({a:c})
    y.update([b,c])

anss =dict((new_key,[k for k,v in x.iteritems() if new_key==v]) for new_key in y)
result=[{"name":k,"target":v} for k,v in anss.iteritems()]