Python Pandas数据帧单元更改不显示

2024-10-01 17:27:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python和pandas的新手,我正在尝试操作csv数据文件。我加载两个数据帧一个包含关键字的列,另一个包含“id”和“word”列的“bagOfWords”。我要做的是在第一个dataframe中添加一个列,该列的关键字id为“list string”,如“[1,2,8,99…]”。在

这就是我目前所想到的

websitesAlchData = pd.io.parsers.read_csv('websitesAlchData.csv', sep=';', index_col='referer', encoding="utf-8")

bagOfWords = pd.io.parsers.read_csv('bagOfWords.csv', sep=';', header=0, names=["id","words","count"], encoding="utf-8")
a = set(bagOfWords['words'])
websitesAlchData['keywordIds'] = "[]"
for i in websitesAlchData.index
    keywords = websitesAlchData.loc[i,'keywords']
    try:
        keywordsSet = set([ s.lower() for s in keywords.split(",") ])
    except:
        keywordsSet = set()
    existingWords = a & keywordsSet
    lista = []
    for i in bagOfWords.index:
        if bagOfWords.loc[i,'words'] in existingWords:
            lista.append(bagOfWords.loc[i,'id'])

    websitesAlchData.loc[i,'keywordIds'] = str(lista)
    print(str(lista))
    print(websitesAlchData.loc[i,'keywordIds'])
websitesAlchData.reset_index(inplace=True)
websitesAlchData.to_csv(path_or_buf = 'websitesAlchDataKeywordCode.csv', index=False, sep=";", encoding="utf-8")

for循环末尾的两个打印结果给出了预期的结果,但是当我试图打印整个数据帧“websitesAlchData”时,“keywordIds”列仍然是“[]”,因此它也在结果的.csv中。在

我的猜测是我在某处创建了一个副本,但我不知道在哪里。在

你知道这里有什么不对吗?或者怎么做同样的事情? 谢谢!在

更新:

在网站salchdata.cvs看起来像这样

^{pr2}$

还有一袋词cvc。在

id;index;count
0;word0;11
1;word1;14
2;word2;14
3;word3;14
...

预期产量

referer;category;keywords;keywordIds
url;int;word0,word2,word3;[0,2,3]
url;int;word1,word3;[1,3]

Tags: csvinidforindexlocseputf
2条回答

对两个for循环使用i肯定有问题。改变一下,看看有没有帮助。在

我会试试这样的。您需要在较大的数据集上分析性能。在

In [146]: df1
Out[146]: 
  referer category           keywords
0     url      int  word0,word2,word3
1     url      int        word1,word3

[2 rows x 3 columns]

In [147]: df2
Out[147]: 
       id  count
index           
word0   0     11
word1   1     14
word2   2     14
word3   3     14

[4 rows x 2 columns]

keywords列拆分为一个单词列表。通常在数据帧中存储列表对于性能来说是个坏主意,但这是目前最直接的方法。在

^{pr2}$

然后对df2中列表的每个元素应用查找:

In [151]: ids = vals.apply(lambda x: [df2.loc[y, 'id'] for y in x])

In [152]: ids
Out[152]: 
0    [0, 2, 3]
1       [1, 3]
Name: keywords, dtype: object

最后,concat:

^{4}$

相关问题 更多 >

    热门问题