首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加载压缩形式的SVMlight格式的文件到pandas?

如何加载压缩形式的SVMlight格式的文件到pandas?
EN

Stack Overflow用户
提问于 2020-01-16 17:29:45
回答 2查看 336关注 0票数 0

我有SVMlight格式的数据(标签feature1 1:Value1 feature1 2:V2 ...)正因如此

代码语言:javascript
复制
talk.politics.guns a:12 about:1 abrams:1 absolutely:1
talk.politics.mideast I:4 run:10 go:3

我尝试过sklearn.load_svmlight_file,但它似乎不适用于分类字符串功能和标签。我正试着把它存储到熊猫DataFrame中。如有任何建议,我们将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-15 22:54:13

你可以用手来做...有一种方法可以在DataFrame中转换您想要的文件:

代码语言:javascript
复制
svmformat_file = """~/svmformat_file_sample"""

# Read to list
with open(svmformat_file, mode="r") as fp:
    svmformat_list = fp.readlines()

# For each line we save the key:values to a dict
pandas_list = []
for line in svmformat_list:
    line_dict = dict()

    line_split = line.split(' ')
    line_dict["label"] = line_split[0]

    for col in line_split[1:]:
        col = col.rstrip()  # Remove '\n'
        col_split = col.split(':')
        key, value = col_split[0], col_split[1]
        line_dict[key] = value

    pandas_list.append(line_dict)

示例文件的结果DataFrame:

代码语言:javascript
复制
pd.DataFrame(pandas_list)

票数 0
EN

Stack Overflow用户

发布于 2021-01-27 19:10:35

我想指出的是,如果您的其中一个单词是'label',来自Christian Gome的公认答案将失败,因为您将使用向量中单词的计数覆盖分类标签。此外,由于计数未转换为int,因此无法进行任何数学运算。

由于您确定每个(特征、值)对都由:分隔,因此可以通过使您的'label'密钥类似于':label'来解决此问题。这不是很理想,但它可以避免碰撞。

或者,您可以将标签存储在单独的数据帧中,这可能是一个更好的解决方案,因为您可能不想对您的分类标签进行数学运算。

代码语言:javascript
复制
svmformat_file = """~/svmformat_file_sample"""

# Read to list
with open(svmformat_file, mode="r") as fp:
    svmformat_list = fp.read().splitlines()

# For each line we save the key:values to a dict
pandas_label_list = []
pandas_feature_list = []
for line in svmformat_list:
    feature_dict = {}

    items = line.split()
    pandas_label_list.append({'label': items[0]})

    for pair in items[1:]:
        feature_name, count = pair.split(':')
        feature_dict[feature_name] = int(count)

    pandas_feature_list.append(feature_dict)

然后,使用Christian使用的相同数据,您现在有了两个数据帧:

代码语言:javascript
复制
>>> pd.DataFrame(pandas_label_list)
>>>                 label
0   talk.politics.guns
1   talk.politics.mideast
>>> pd.DataFrame(pandas_feature_list)
>>> a about abrams absolutely   I run  go
0  12     1      1          1 NaN NaN NaN
1 NaN   NaN    NaN        NaN   4  10   3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59766515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档