【问题标题】:Cleaning text in python在python中清理文本
【发布时间】:2018-04-23 16:01:45
【问题描述】:

我刚开始使用 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      |
+------+-------------------------------+-----------------------------+-------------------+-------------------------+------------+-----------------+

【问题讨论】:

  • 你想要的输出是什么,Gyrgy Kepes
  • 在这种情况下,艺术家的名字是 György Kepes,我猜我的文件没有读取特殊字符,所以这就是我得到 Gy̦rgy Kepes 的原因。我的数据集中还有其他类似的例子:LÌÁszlÌ_ Moholy-Nagy 而不是 László Moholy-Nagy。我不担心拼写是否正确,因为我要将名称转换为分类值。所以是的,你给我的建议非常有效!
  • 你能发布一个文件的小样本吗?
  • 要获得第一个国家,您可以使用一些简单的字符串方法。 'France/America'.split('/')[0]

标签: python text-manipulation


【解决方案1】:

如果你想删除坏字符,你可以简单地编码成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

【讨论】:

  • 它对整个专栏如何运作?我试过这样的事情: import string clean_name = set(string.printable) data['artist'].join(filter(lambda x: x in clean_name, data['artist'])) 它给出了以下错误: AttributeError: “系列”对象没有属性“加入”
  • @AlonsoAg 您可以使用for 循环遍历整个列。
猜你喜欢
  • 1970-01-01
  • 2022-06-17
  • 2021-12-11
  • 1970-01-01
  • 2017-09-20
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多