【问题标题】:Duplicate & identify certain rows in a Pandas Dataframe复制和识别 Pandas 数据框中的某些行
【发布时间】:2019-09-27 15:47:21
【问题描述】:

我想用正则表达式识别和复制我的 DataFrame 的某些行。

例如我的 df :

   var1  
0  House A and B 
1  2 garage + garden 
2  fridges

我在 var2 中想要的结果(也保留我的 var1):

   var1                  var2
0  House A and B         House A
1  House A and B         House B
2  2 garage + garden     Garage 1
3  2 garage + garden     Garage 2
4  2 garage + garden     Garden
5  fridges               fridge 1
6  fridges               fridge 2

我不知道具体该怎么做,我认为使用正则表达式是个好主意,但我不是。

感谢您的帮助。

【问题讨论】:

  • 每一行使用不同的规则来确定变量 2 中的操作,因此您必须非常小心地编写代码的不同情况。
  • 是的,当然。这只是我的数据框的一个示例
  • 有人可以帮助我吗?请
  • 问题是您的问题非常广泛,可能样本不足以概括您的整个数据集。我将帮助您完成第一个示例,但如果可以有两个以上的项目,它仍然不一定有效。

标签: python regex dataframe duplicates rows


【解决方案1】:

您的问题非常广泛,所以这里对您的第一个案例场景有一点帮助:

import re
import pandas as pd

var1 = pd.DataFrame(['House A and B'], columns=['var1'])

new_df = pd.DataFrame(columns=['var1','var2'])
for idx,string in enumerate(var1):

    if re.search(r'\band\b',var1.iloc[idx][0]):

        df_aux = pd.DataFrame(var1.iloc[idx].repeat(2).reset_index(drop=True))
        df_aux.columns=['var1']
        new_df = new_df.append(df_aux, sort=True)
        last_letter = re.search(r'and.(\w+).*', var1.iloc[idx][0]).group(1)
        first_letter =re.search(r'(\w+).and.*', var1.iloc[idx][0]).group(1)
        trimmed_string = re.search(r'(\w+) .*', var1.iloc[idx][0]).group(1)
        new_df.var2.iloc[-2] = trimmed_string + ' ' + first_letter 
        new_df.var2.iloc[-1] = trimmed_string + ' ' + last_letter 

输出:

            var1     var2
0  House A and B  House A
1  House A and B  House B

这在大数据集上效率非常低,原因有二:regex 很慢,您应该尽量避免循环遍历 DataFrame。但是因为您的样本可能非常不完整,所以这至少应该是稳健的。您可以使用相同的逻辑从其他模式中提取您要查找的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-22
    • 2019-06-20
    • 1970-01-01
    • 2018-02-23
    • 2019-07-22
    • 1970-01-01
    • 2016-06-13
    • 2019-01-23
    相关资源
    最近更新 更多