0
我有一个简单的文件,该文件列出名称是文本的一部分文本,然后单词创建边缘名单二分图:的Python:用熊猫
text,words
ANC088,woods dig spirit controller father treasure_lost
ANC089,controller dig spirit
ANC090,woods ag_work tomb
ANC091,well spirit_seen treasure
与pandas
工作,我都这样了,虽然klugey解决方案得到节点的列表为二分图的两边,一边列出文本和其他的话,在这种情况下,与文字相关的:
import pandas as pd
df = pd.read_csv(open('tales-02.txt', 'r'))
node_list_0 = df['text'].values.tolist()
node_list_1 = filter(None, sorted(set(' '.join(df['words'].values.tolist()).split(' '))))
这是不漂亮,但它工作,而且对我的小数据集足够快。
我需要的是这两个节点之间的边缘列表。我可以在csv
这个,但我不知道如何在pandas
做到这一点。这是我的工作csv
:
texts = csv.reader(open('tales-01.txt', 'rb'), delimiter=',', skipinitialspace=True)
for row in texts:
for item in row[1:]:
edge_list.append((row[0], item))
我要指出,这个版本的输入是CSV一路:
ANC088,woods,dig,spirit,controller,father,treasure_lost
ANC089,controller,dig,spirit
我调整的文件格式,使之更容易为我写的pandas
的东西 - 如果有人也可以告诉我如何从纯粹的csv
文件中获取节点列表,那就太棒了。
我宁愿这样做或者全部csv
或全部pandas
。我试图编写一个脚本,使用csv
来获取节点列表,但我一直得到一个空列表。那时我转向pandas
,每个人都告诉我我应该使用它。
如果我添加'edge_list = df.values.tolist()'上面的第二个答案下面,我得到了我所需要的。我将在第二天左右花这些代码来了解它的工作原理,但这是一个可行的解决方案。我喜欢你使用'tales-01'。任何关于如何使用节点列表的建议?也就是说,有没有办法告诉'pandas'使用1行中的第一个项目来填充1列,并将其他所有内容放在第二列中? (SO礼节意味着我应该让这个第二个问题?) –
对于任何好奇的人,这里是我提出的合并代码 - 我不确定'list(set(* .tolist))有多漂亮,但是它的工作原理和我写的! (下面是因为我无法弄清楚如何在评论中做一个代码块,我不想在@ dov-grobgeld的回复之后声称自己回答我的问题,所以我不想这么傲慢。 –
' ''df =(pd.read_csv('tales-01.txt',header = None) .groupby(level = 0) .apply(lambda x:pd.DataFrame([[x.iloc [0,0] ,v] for v in x.iloc [0,1:]])) 。reset_index(drop = True) .dropna() .rename_axis({0:'text',1:'word'},axis = 1) ) edges = df.values.tolist() nodes_0 = list set(df ['text']。values.tolist())) nodes_1 = list(set(df ['word']。values.tolist()))'''' –