将数据帧列转换为列表列表并转换回数据帧,同时保持 ID 关联



我有一个由两列组成的数据帧:IDTEXT。假设数据如下:

ID    TEXT
1     The farmer plants grain. The fisher catches tuna.
2     The sky is blue.
2     The sun is bright.
3     I own a phone. I own a book.

我正在使用 nltk 对TEXT列进行清理,所以我需要将TEXT列转换为列表:

corpus = df['TEXT'].tolist()

执行清理(标记化、删除特殊字符和删除非索引字)后,输出是"列表列表",如下所示:

[[['farmer', 'plants', 'grain'], ['fisher', 'catches', 'tuna']],
[['sky', 'blue']],
[['sun', 'bright']],
[['I', 'own', 'phone'], ['I', 'own', 'book']]]

我知道如何将列表恢复到 pandas 数据帧中,但是如何将列表列表返回到 pandas 数据帧中,并且 ID 列仍分配给文本?我想要的输出是:

ID    TEXT
1     'farmer', 'plants', 'grain'
1     'fisher', 'catches', 'tuna'
2     'sky', 'blue'
2     'sun', 'bright'
3     'I', 'own', 'phone'
3     'I', 'own', 'book'

我假设这是与 Python 数据结构之间的转换相关的简单内容,但我不确定从哪里开始。这里的具体工作产品不如数据帧的概念重要 ->本机Python数据结构 ->对本机Python数据结构执行某些操作 ->具有原始属性的数据帧完好无损。

非常感谢大家提供的任何见解!如果我能改进我的问题,请告诉我!

Pandas 数据帧提供了许多快速的全面操作,但如果数据没有塞进数据帧中,确实更容易获得数据——特别是如果你刚刚开始。如果您将使用 nltk,我当然推荐它。若要将文本和 ID 放在一起,请将数据框转换为元组列表。如果数据帧确实只有两个有意义的列,则可以这样做:

>>> data = list(zip(df["ID"], df["TEXT"]))
>>> from pprint import pprint
>>> pprint(data)
[(265, 'The farmer plants grain. The fisher catches tuna.'),
(456, 'The sky is blue.'),
(434, 'The sun is bright.'),
(921, 'I own a phone. I own a book.')]

现在,如果您想在不丢失 id 的情况下处理句子,请使用这样的双变量循环。(这将创建您请求的额外行):

sent_data = []
for id, text in data:
for sent in nltk.sent_tokenize(text):
sent_data.append((id, sent))

你做什么取决于你的应用程序;你可能会创建一个新的双元素元组列表。如果只是应用转换,请使用列表推导式。例如:

>>> datawords = [ (id, nltk.word_tokenize(t)) for id, t in data ]
>>> print(datawords[3])
(921, ['I', 'own', 'a', 'phone', '.', 'I', 'own', 'a', 'book', '.'])

将元组列表转回数据帧非常简单:

newdf = pd.DataFrame(datawords, columns=["INDEX", "WORDS"])

最新更新