【问题标题】:pattern matching in data and creating csv's which satisfy the pattern condition in python数据中的模式匹配并创建满足python中模式条件的csv
【发布时间】:2018-02-08 14:52:09
【问题描述】:

我正在处理如下图所示的数据集。

我已经使用 pandas 在 Python 中导入了 CSV 格式的数据集。 我希望将整个数据与列 PATR 中具有“a;b;c”、“lp;kl;jj”之类的值的所有列(即,其中包含带分号的数据的值)分隔成一个CSV 和其他值,如“;”和“250”到一个单独的csv。 我尝试根据分号拆分值并根据长度将其分开,但我没有得到完全匹配。

实际数据集:

预期输出 1(PATR 列带有“ANY_DATA 和分号”的所有数据)

预期输出 2(所有 PATR 列中的“只有分号或只有数据”的数据)

提前致谢。

【问题讨论】:

  • 预期输出是多少??也不要添加数据集的图片,而是将其添加为文本
  • 请用 csv 文件的样本替换您的数据截图
  • 你觉得“IP;KL”是在输出 1 还是 2 中??

标签: python python-3.x pandas csv data-cleaning


【解决方案1】:

根据您的要求试试这个:

 def pattern_matcher(y) :
    if y.count(';')<1 or y ==';':
        #case of the string doesn't contain any ';'
        return True
    else :
        """
        this will return True if it contain only ';' without any empty word preceding it , using 
        strip to check if it is only ';'
        """
        return False #all([not x.strip() for x in y.split(";")])

然后将其应用到您的数据框列

out2 = df2.loc[(df2.part.apply(pattern_matcher))]


part
2   ;
3   250

out1 = df2.loc[~(df2.part.apply(pattern_matcher))]

    part
0   A;B;C
1   ip;KL;JH

【讨论】:

  • 非常感谢您的帮助!但在任何一个查询中,我仍然得到具有';'的行以及具有 '; 的列与数据'。
  • @gbppa 我已经更正并改进了我的答案,如果我是对的,请告诉我
【解决方案2】:
mask = df['PATR'].str.contains(';^\w+(;\w+)*$', na=False)
df1 = df[mask]
df2 = df[~mask]

这将适用于您的测试数据。我从here 中提取了正则表达式。

【讨论】:

  • 这取决于 250 的格式。由于 OP 从未发布任何数据,因此我将其假定为一个数字。无论如何,我修复它以匹配 250 作为数字或字符串。
  • 非常感谢您的帮助!但在任何一个查询中,我仍然得到具有';'的行以及具有 '; 的列与数据'。
  • 发布一些实际数据。就像在复制粘贴代码中一样,它将创建一个测试数据框,其中的所有内容都按照您的格式进行格式化。屏幕截图不起作用。
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-15
相关资源
最近更新 更多