【问题标题】:Problem merging strings in pandas dataframe - encoding issue?合并熊猫数据框中的字符串时出现问题 - 编码问题?
【发布时间】:2020-04-22 11:41:05
【问题描述】:

我一直在尝试在 Pandas 中合并字符串;它们中的大多数都可以工作,但有些不匹配,尽管在 excel 文件中看起来完全一样。

data looks like:
File Name: company 1.pdf; Security Name: Series A Common
File Name: company 2.pdf; Security Name: Series B Common

ra1['File Name'] = ra1['File Name'].astype(str)
ra1['Security Name'] = ra1['Security Name'].astype(str)

ra1['Security Name 2'] = ra1['Security Name'].str.replace(" ","")


ra2['File Name'] = ra2['File Name'].astype(str)
ra2['Security Name'] = ra2['Security Name'].astype(str)

ra2['Security Name 2'] = ra2['Security Name'].str.replace(" ","")

x = pd.merge(ra1,ra2,on=['File Name','Security Name 2'],how='left') 

我注意到,在去除空白之后,第一个数据集中的一些系列名称仍然有一个空格,而第二个数据集中的等价物似乎没有,因此这些名称的合并失败。例如,Stock ACommon 与 StockACommon。 dtypes 说对象。这些在 excel 文件中;尝试将列更改为 excel 中的文本,但没有任何区别。

【问题讨论】:

  • 你发布的代码在ra2['Security Name 2]之后定义了ra2['Security Name']
  • @SimonCrane 谢谢 - 已修复
  • Excel 文件的编码是什么?如果您从 excel 文件中剪切并粘贴“不同的空格字符”,将其粘贴到 str.replace() fct 中,行为是否有任何变化?我想知道您是否有空格,这不是空格,类似于我在 Excel 中看到的“全角括号”(单数),str.replace("(")) 正确地无法替换。
  • @Evan 因此,如果我将该字符作为新命令放入 str.replace() 中,则会在新输出中消除空格或字符。另外,如果我在 Excel 中检查字符串的等价性,它们是不等价的。但是,如果我在单元格中键入相同的确切单词,那么它们是等效的。
  • 尝试使用正则表达式删除空格,ra['Security Name'].str.replace('(\s+)','')

标签: python string pandas encoding merge


【解决方案1】:

只是添加作为答案,

为了匹配所有空格,例如a b c,我们可以利用正则表达式

\s+ 匹配任何空白字符(等于 [\r\n\t\f\v ])

+ Quantifier — 匹配一次到无限次,尽可能多次,按需回馈(贪婪)

ra['Security Name'] = ra['Security Name'].str.replace('(\s+)','')
out:
Security Name
abc

正则表达式演示:

https://regex101.com/r/3oyYte/1

【讨论】:

    猜你喜欢
    • 2019-05-26
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2023-03-11
    • 2021-12-27
    • 2015-11-09
    相关资源
    最近更新 更多