我有SVMlight格式的数据(标签feature1 1:Value1 feature1 2:V2 ...)正因如此
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中。如有任何建议,我们将不胜感激。
发布于 2020-05-15 22:54:13
你可以用手来做...有一种方法可以在DataFrame中转换您想要的文件:
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:
pd.DataFrame(pandas_list)

发布于 2021-01-27 19:10:35
我想指出的是,如果您的其中一个单词是'label',来自Christian Gome的公认答案将失败,因为您将使用向量中单词的计数覆盖分类标签。此外,由于计数未转换为int,因此无法进行任何数学运算。
由于您确定每个(特征、值)对都由:分隔,因此可以通过使您的'label'密钥类似于':label'来解决此问题。这不是很理想,但它可以避免碰撞。
或者,您可以将标签存储在单独的数据帧中,这可能是一个更好的解决方案,因为您可能不想对您的分类标签进行数学运算。
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使用的相同数据,您现在有了两个数据帧:
>>> 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 3https://stackoverflow.com/questions/59766515
复制相似问题