这是我多次潜伏和阅读帖子后第一次询问Stack Overflow问题。
我一直在处理无头的CSV数据集,如下所示:
list-of-things-that-are-present-in-this-entry, Yes
list-of-things-that-are-present-in-this-entry, No
每个数据集的大小范围从~30KB到~100MB。
现在,就值的数量而言,每个条目的长度都不同。当我用Pandas读取CSV文件时,它一直在为我调整条目 - 但不是以我想要的方式。
让我们说第二个条目是两者中较短的一个。 Pandas一直用NaN填充剩下的行,所以它与其他条目的长度相同。
list-of-things-that-are-present-in-this-entry, Yes
list-of-things-that-are-present-in-this-entry, No, NaN, NaN
问题是,这会抛弃到目前为止我尝试使用的get_dummies
函数。 '是'和'不'值适用于同一属性。通过"抛出",我的意思是它已经将每列值视为同一属性(例如,是和NaN,当它应该是Yes和No进行比较时)。
关于我能做什么的任何建议?也许在标题上?我想要的基本上是这样的:
A B C D E F isThingTrue?
0 0 1 0 1 0 0 0
1 1 0 1 0 0 0 1
2 0 1 1 1 0 1 1
来自:
B, D, No
A, C, Yes
B, C, D, F, Yes
文件本身看起来像这样:
A, B, C, D, E, F, isThingTrue?
0, 1, 0, 1, 0, 0, 0
1, 0, 1, 0, 0, 0, 1
0, 1, 1, 1, 0, 1, 1
我不会和熊猫或其他任何人结婚;在搜索了一百五十个兔子搜索查询之后,我一直在绝望地问道。这是我第一次尝试数据修改和Python。如果我做错了,请告诉我。
答案 0 :(得分:1)
您可以使用scikit-learn CountVectorizer
,您需要覆盖令牌模式,因为默认情况下它只捕获2个或更多字符的单词。
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
s = """B, D, No
A, C, Yes
B, C, D, F, Yes"""
c = CountVectorizer(token_pattern='\w+')
values = c.fit_transform(s.split('\n'))
pd.DataFrame(values.toarray(), columns=c.vocabulary_)
a d c yes f b no
0 0 1 0 1 0 1 0
1 1 0 1 0 0 0 1
2 0 1 1 1 1 0 1
您的数据格式并非真的是CSV,因此大熊猫可能不是阅读它的最佳方式,最好只将其作为文本文件阅读。