在python中清理文本

时间:2018-04-23 16:01:46

标签: python text-manipulation

我刚刚开始用python编码,我有一个数据集,其中我的两个列给了我一些问题。其中一个人拥有艺术家的原籍国信息,其中一些人具有双重国籍,如:法国/美国。我试图只获得第一个国家,在这种情况下是法国。对于第二列,我有艺术家的名字,但其中一些有奇怪的字符,例如:GyÌ| rgy Kepes。什么是清理这些元素的最佳方法?如果这有任何帮助,我将按以下方式打开我的文件:

 data = pd.read_csv(fpn_csv, encoding='ISO-8859-1')

我不知道这是否会以任何方式影响我的进程,但如果我使用UTF-8则无法打开文件

列的名称是:

country_of_origin和艺术家。

以下是我的文件示例:

+------+-------------------------------+-----------------------------+-------------------+-------------------------+------------+-----------------+
| ID   |         artist_title          |        art_movement         |   museum_venue    |    country_of_origin    |  has_text  |  primary_medium |
+------+-------------------------------+-----------------------------+-------------------+-------------------------+------------+-----------------+
| 361  |  LÌÁszlÌ_ Moholy-Nagy         |  Vertical Black, Red, Blue  |  LACMA also MoMA  |  Hungary                |  FALSE     |  sculpture      |
| 362  |  BrassaÌø (Gyula HalÌÁsz)     |  Buttress of the Elevated   |  MoMA             |  Transylvania / France  |  FALSE     |  photography    |
| 363  |  M. C. Escher                 |  Relativity                 |  MoMA             |  Denmark                |  FALSE     |  print          |
| 364  |  Clyfford Still 1944-N No. 2  |  abstract expressionism     |  MoMA             |  America                |  FALSE     |  painting       |
| 365  |  Harold E. Edgerton           |  Milk Drop                  |  MoMA             |  America                |  FALSE     |  photography    |
| 366  |  Meret Oppenheim Object       |  surrealism                 |  MoMA             |  Germany / Switzerland  |  FALSE     |  sculpture      |
+------+-------------------------------+-----------------------------+-------------------+-------------------------+------------+-----------------+

1 个答案:

答案 0 :(得分:0)

如果你想删除坏字符,你可以简单地编码为ascii。

>>> s = 'Gy̦rgy Kepes'
>>> s.encode('ascii', errors='ignore').decode()
Gyrgy Kepes

如果您不介意输出类型为bytes

,则不需要解码

另一种方法可能是使用filter

>>> import string
>>> good = set(string.printable) # 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ 
>>> s = 'Gy̦rgy Kepes'
>>> ''.join(filter(lambda x: x in good, s))
Gyrgy Kepes