【问题标题】:Pandas Dataframe TypeError: translate() takes exactly one argument (2 given)Pandas Dataframe TypeError: translate() 只接受一个参数(给定 2 个)
【发布时间】:2019-06-24 11:09:30
【问题描述】:

我正在尝试删除我的 pandas 数据框中的标点符号和数字。这是我的代码示例:

import re
import string
df.text = df.text.apply(lambda x: x.lower())
df.text = df.text.apply(lambda x: x.translate(None, string.punctuation))

它给了我错误:

TypeError: translate() 只接受一个参数(给定 2 个)

我试图在翻译中删除 None 所以它变成:

 df.text = df.text.apply(lambda x: x.translate(string.punctuation))

它没有给我任何错误,但是这段代码没有按照我的意愿删除标点符号。我正在使用python 2.7。你能帮助我吗 ?提前谢谢你

【问题讨论】:

  • 你的正则表达式在哪里?
  • @Tomothy32,抱歉,我刚刚编辑了我的问题。
  • 要删除标点符号吗?
  • 你确定你使用的是python 2.7吗?
  • @MohitMotwani 是的,我想删除列中的标点符号。我实际上是在使用带有 python 2 的 jupyter notebook

标签: python pandas python-2.7 dataframe


【解决方案1】:

你可以使用pandas内置的Series.str.translate

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'text': ['f!!o..o!', 'b""a??r', 'b?.?a!.!z']})

In [3]: df
Out[3]:
        text
0   f!!o..o!
1    b""a??r
2  b?.?a!.!z

In [4]: import string

In [5]: df.text = df.text.str.translate(None, string.punctuation)

In [6]: df
  text
0  foo
1  bar
2  baz

【讨论】:

  • 谢谢您的回答。当我尝试按照您给出的示例进行操作时,“文本”列中的所有内容都变为 NaN。
【解决方案2】:

在 python 2 上试试这个:

df = pd.DataFrame({'text': ['f!!o..o!', 'b""a??r', 'b?.?a!.!z']})
      text
0   f!!o..o!
1    b""a??r
2  b?.?a!.!z

import string
table = string.maketrans("","")
df.text = df.text.apply(lambda x: x.translate(table, string.punctuation))

df
   text
0  foo
1  bar
2  baz

make_trans 函数制作翻译表,就像字典一样(将键翻译成值)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2014-06-04
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2017-03-27
    相关资源
    最近更新 更多