【问题标题】:Replacing/Stripping certain text from data in pandas?从熊猫的数据中替换/删除某些文本?
【发布时间】:2014-08-19 16:42:54
【问题描述】:

我遇到了 Pandas 无法正确替换某些文本的问题...

# Create blank column
csvdata["CTemp"] = ""
# Create a copy of the data in "CDPure"
dcol = csvdata.CDPure
# Fill "CTemp" with the data from "CDPure" and replace and/or remove certain parts
csvdata['CTemp'] = dcol.str.replace(" (AMI)", "").replace(" N/A", "Non")

但是,当我打印它时,它并没有通过运行print csvdata[-50:].head(50) 替换任何内容,如下所示

         Pole     KI   DE    Score   STAT  CTemp
4429      NaN      NaN  NaN      42    NaN  Data N/A 
4430      NaN      NaN  NaN   23.43    NaN  Data (AMI)
4431      NaN      NaN  NaN    7.05    NaN  Data (AMI)
4432      NaN      NaN  NaN    9.78    NaN  Data 
4433      NaN      NaN  NaN  169.68    NaN  Data (AMI)
4434      NaN      NaN  NaN   26.29    NaN  Data N/A
4435      NaN      NaN  NaN   83.11    NaN  Data  N/A

注意:CSV 相当大,所以我必须使用pandas.set_option('display.max_columns', 250) 才能打印以上内容。

有人知道我怎样才能让它在熊猫中正确替换这些部分吗?

编辑,我试过 .str.replace("", "") 并尝试了 .replace("", "")

CSV 示例:

No,CDPure,Blank
1,Data Test,
2,Test N/A,
3,Data N/A,
4,Test Data,
5,Bla,
5,Stack,
6,Over (AMI),
7,Flow (AMI),
8,Test (AMI),
9,Data,
10,Ryflex (AMI),

示例代码:

# Import pandas
import pandas

# Open csv (I have to keep it all as dtype object otherwise I can't do the rest of my script)
csvdata = pandas.read_csv('test.csv', dtype=object)

# Create blank column
csvdata["CTemp"] = ""
# Create a copy of the data in "CDPure"
dcol = csvdata.CDPure
# Fill "CTemp" with the data from "CDPure" and replace and/or remove certain parts
csvdata['CTemp'] = dcol.str.replace(" (AMI)", "").str.replace(" N/A", " Non")

# Print
print csvdata.head(11)

输出:

    No        CDPure Blank         CTemp
0    1     Data Test   NaN     Data Test
1    2      Test N/A   NaN      Test Non
2    3      Data N/A   NaN      Data Non
3    4     Test Data   NaN     Test Data
4    5           Bla   NaN           Bla
5    5         Stack   NaN         Stack
6    6    Over (AMI)   NaN    Over (AMI)
7    7    Flow (AMI)   NaN    Flow (AMI)
8    8    Test (AMI)   NaN    Test (AMI)
9    9          Data   NaN          Data
10  10  Ryflex (AMI)   NaN  Ryflex (AMI)

【问题讨论】:

  • 一件事是您忘记再次使用str 进行第二次替换。你需要dcol.str.replace(" (AMI)", "").str.replace(" N/A", "Non")。不知道这是否是整个问题。
  • 对不起,我忘了说,我刚刚编辑了我的帖子。我都试过了,但都没有工作。
  • 您能否提供一个完整的精简示例,其中包含说明问题的示例数据?
  • @BrenBarn,编辑并添加了示例 csv、示例代码和示例输出。它表明唯一有效的是N/A 一个,但(AMI) 不起作用。

标签: python python-2.7 replace pandas strip


【解决方案1】:

str.replace 将其参数解释为正则表达式,因此您需要使用 dcol.str.replace(r" \(AMI\)", "").str.replace(" N/A", "Non") 转义括号。

这似乎没有充分记录; the docs 提到 splitreplace “也采用正则表达式”,但没有明确表示他们总是将其参数解释为正则表达式。

【讨论】:

  • 我也找到了一个解决方法,通过 .str.replace(u"(", "").str.replace(u")", "") 然后添加第二个替换来删除/更改文本部分。
猜你喜欢
  • 1970-01-01
  • 2021-01-11
  • 2022-12-17
  • 2017-06-26
  • 2019-01-17
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多