如何将表结构数据转换为python/pandas中的dict/graph结构,以用于D3中的强制图?
我一直在转换此csv:如何将表结构数据转换为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 ]
"","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()]