【问题标题】:parse string into columns python pandas /xa0 in stead of white space将字符串解析成列 python pandas /xa0 而不是空格
【发布时间】:2014-01-24 02:29:15
【问题描述】:

如何快速创建包含“文件”列中包含的三个块的新列?

收到这样乱七八糟的数据

d = {   'File' : pd.Series(['firstname lastname                   05/31/1996                     9999999999  ', 'FN SometimesMiddileInitial. LN                    05/31/1996                 9999999999  ']), 
    'Status' : pd.Series([0., 0.]), 
    'Error' : pd.Series([2., 2.])}
df=pd.DataFrame(d)

更新 实际上,我从一个非常混乱的 excel 文件开始,我的数据在字符串字符之间有 '\xa0 \xa0'。 所以我的第一次尝试看起来像

from pandas import DataFrame, ExcelFile
import pandas as pd
location = r'c:/users/meinzerc/Desktop/table.xlsx'
xls = ExcelFile(location)
table = xls.parse('Sheet1')
splitdf = df['File'].str.split('\s*)

我的尝试根本不起作用。为什么?

【问题讨论】:

标签: python pandas


【解决方案1】:

您可以使用正则表达式来选择至少两个空格:

In [11]: df.File.str.split('\s\s+')
Out[11]: 
0       [firstname lastname, 05/31/1996, 9999999999, ]
1    [FN SometimesMiddileInitial. LN, 05/31/1996, 9...
Name: File, dtype: object

也许更好的选择是使用extract(也许还有更简洁的正则表达式!!):

In [12]: df.File.str.extract('\s*(?P<name>.*?)\s+(?P<date>\d+/\d+/\d+)\s+(?P<number>\w+)\s*')
Out[12]: 
                             name        date      number
0              firstname lastname  05/31/1996  9999999999
1  FN SometimesMiddileInitial. LN  05/31/1996  9999999999

[2 rows x 3 columns]

【讨论】:

  • 谢谢安迪。简单而完美..在实践中,但是当我在我的 excel df 上尝试它时,df.values 显示 '\xa0 \xa0' 而不是空白。我以前从未处理过这个问题,所以我尝试了 df.File.str.split('\\xa0+\s*\\xa0*') 并最终得到了它!也许我可以编辑我的原始问题以征求对 \xa0 的反馈?另外,我会尝试提取物!看起来很棒,我喜欢提取物,因为它更有目的性!
  • @ChetMeinzer 这是一个用于不间断空白的 latin-1 代码点。恐怕你偶尔会被这种东西咬伤,所以最好稍后检查结果,看看接下来会咬什么:)。另一种选择可能是先使用.replace('\xa0', ' ')
  • 我认为你是对的。如果我能把它弄出来,那么调整会更正常。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2021-12-08
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多