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

2024-05-07 03:27:49 发布

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

我有一个由两列组成的数据帧: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列转换为列表:

^{pr2}$

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

[[['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数据结构之间的转换有关,但我不确定从哪里开始。这里的具体工作产品不如dataframe-->;native Python data structure--gt;do something to native Python data structure--gt;dataframe(原始属性不变)的概念重要。在

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


Tags: the数据textid列表bluesunfisher
1条回答
网友
1楼 · 发布于 2024-05-07 03:27:49

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的情况下处理句子,可以使用这样的双变量循环。(这将创建您请求的额外行):

^{pr2}$

您要做什么取决于您的应用程序;您可能会创建一个包含两个元素元组的新列表。如果你只是在应用一个转换,使用列表理解。例如:

>>> 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"])

相关问题 更多 >