Python / 使用 Pandas 从文本文件中读取和分组数据

Posted

技术标签:

【中文标题】Python / 使用 Pandas 从文本文件中读取和分组数据【英文标题】:Python / Read and group data from text file with Pandas 【发布时间】:2019-04-24 14:07:13 【问题描述】:

我有一个文本文件如下:

Sentence:1 Polarity:N 5puan verdim o da anistonun güzel yüzünün hatırına.
Sentence:2 Polarity:N son derece sıkıcı bir filim olduğunu söyleyebilirim.
Sentence:3 Polarity:N ..saçma bir konuyu nasılda filim yapmışlar maşallah
Sentence:4 Polarity:P bence hoş vakit geçirmek için seyredilebilir.
Sentence:5 Polarity:P hoş ve sevimli bir film.
Sentence:6 Polarity:O eşcinsellere pek sempati duymamakla beraber bu filmde sanki onları sevimli göstermeye çalışmışlar gibi geldi.
Sentence:7 Polarity:O itici bir film değildi sonuçta.
Sentence:8 Polarity:N seyrederken bu kadar sinirlendiğim film hatırlamıyorum.
Sentence:9 Polarity:O  J.Aniston ın hiç mi umut yok diye sorduğu sahnede kıracaktım televizyonu!
Sentence:10 Polarity:O kimse yazmamış ben yazıyım:)
Sentence:11 Polarity:P  güzel bi pazar günü şirin bi film izlemek isteyenler için çok güzel.

我想将这些数据拆分成这样的表格:

Sentence_No - Sentence_Polarity - Sentence_txt
1 - N - 5puan verdim o da anistonun güzel yüzünün hatırına.
2 - N - son derece sıkıcı bir filim olduğunu söyleyebilirim.
3 - N - ..saçma bir konuyu nasılda filim yapmışlar maşallah
4 - P - bence hoş vakit geçirmek için seyredilebilir.

所以我认为我需要从“句子:”、“极性”和最后一个 txt 部分之后获取部分。我想要这样,这样我就可以对数据进行分类。

我写了下面的代码,但它不适用于此目的:

df = pd.read_csv('SU-Movie-Reviews-Sentences.txt', lineterminator='\n', names=['Sentence_No', 'Sentence_Polarity' , 'Sentence_txt'])

【问题讨论】:

如果文本中没有出现 Sentence 和 Polarity,您可以通过内置函数替换它们 它们从未出现在文本中,但我怎样才能做到这一点? 【参考方案1】:

将 DataFrame 的 replace 方法与 regex 一起使用,并在使用 read_csv 读取文件时使用 header=None,因为默认情况下,您的数据集的第一行将被视为标题,您将无法获得第一行.因此,请使用fillna("0"),因为您的数字序列不一致并且为空或Nan:

df = pd.read_csv("SU-Movie-Reviews-Sentences.txt", header=None).fillna("0")

print(df)
                                                   0
0   Sentence:1 Polarity:N 5puan verdim o da anisto...
1   Sentence:2 Polarity:N son derece sıkıcı bir fi...
2   Sentence:3 Polarity:N ..saçma bir konuyu nasıl...
3   Sentence:4 Polarity:P bence hoş vakit geçirmek...
4      Sentence:5 Polarity:P hoş ve sevimli bir film.
5   Sentence:6 Polarity:O eşcinsellere pek sempati...
6   Sentence:7 Polarity:O itici bir film değildi s...
7   Sentence:8 Polarity:N seyrederken bu kadar sin...
8   Sentence:9 Polarity:O  J.Aniston ın hiç mi umu...
9   Sentence:10 Polarity:O kimse yazmamış ben yazı...
10  Sentence:11 Polarity:P  güzel bi pazar günü şi...

以下是您将如何使用replace

>>> df.replace('Sentence:|Polarity:', '',regex=True)
                                                    0
0   1 N 5puan verdim o da anistonun güzel yüzünün ...
1   2 N son derece sıkıcı bir filim olduğunu söyle...
2   3 N ..saçma bir konuyu nasılda filim yapmışlar...
3   4 P bence hoş vakit geçirmek için seyredilebilir.
4                        5 P hoş ve sevimli bir film.
5   6 O eşcinsellere pek sempati duymamakla berabe...
6                 7 O itici bir film değildi sonuçta.
7   8 N seyrederken bu kadar sinirlendiğim film ha...
8   9 O  J.Aniston ın hiç mi umut yok diye sorduğu...
9                   10 O kimse yazmamış ben yazıyım:)
10  11 P  güzel bi pazar günü şirin bi film izleme...

【讨论】:

【参考方案2】:

我把它当作测试字符串:

test = """Sentence:1 Polarity:N 5puan verdim o da anistonun güzel yüzünün hatırına.
Sentence:2 Polarity:N son derece sıkıcı bir filim olduğunu söyleyebilirim.
Sentence:3 Polarity:N ..saçma bir konuyu nasılda filim yapmışlar maşallah
Sentence:4 Polarity:P bence hoş vakit geçirmek için seyredilebilir."""

使用 Python 的 re 模块,您可以使用 re.sub 替换您想要的内容:

new_string = re.sub(r"Sentence:(\d+) Polarity:(\w)", r"\1 - \2 -", test)

为您提供所需的格式。 \1\2 分别是与(\d+) 组匹配的数字或与(\w) 匹配的字母。

现在您可以使用新字符串了。

【讨论】:

以上是关于Python / 使用 Pandas 从文本文件中读取和分组数据的主要内容,如果未能解决你的问题,请参考以下文章

用于各种日期的 Python/Pandas 正则表达式 [重复]

python3 - 从文本文件格式导入数据帧head1 = value | head2 = value

如何将带有文本信息的 1.3 GB csv 文件读入 Python 的 pandas 对象?

使用 pandas Python (pandas.io.parsers.TextFileReader) 从文件中读取数据时出现问题

pandas读取文件

Pandas python合并多个文件文本