我有以下数据集:

df = pd.DataFrame([
{'Phone': 'Fax(925) 482-1195', 'Fax': None},
{'Phone': 'Fax(406) 226-0317', 'Fax': None},
{'Phone': 'Fax+1 650-383-6305', 'Fax': None},
{'Phone': 'Phone(334) 585-1171', 'Fax': 'Fax(334) 585-1182'},
{'Phone': None, 'Fax': None},
{'Phone': 'Phone(334) 585-1171', 'Fax': 'Fax(334) 585-1176'}]
)

它应该如下所示:

enter image description here

我try 做的是:对于我看到的每一行"Fax",我想截断它并将该记录转移到"Fax"列.

起初,我试图使用这个过滤器只查询匹配的内容:

df[df['Phone'].str.contains("Fax") == True, "Fax"] = df[df['Phone'].str.contains("Fax") == True]

但它不起作用,并出现错误:"TypeError:unhasable type:‘Series’".

有什么主意吗?

推荐答案

你有一堆行,也就是一个词典列表. 最简单的方法是按摩每一行 在将其添加到数据帧之前.

rows = [ ... ]

def get_contacts(rows):
    for row in rows:
        phone, fax = row['Phone'], row['Fax']
        if 'Fax' in phone:
            phone, fax = None, phone
        yield phone, fax

df = pd.DataFrame(get_contacts(rows))

使用如下所示的过滤器,您可以强制使用str而不是None:

        ...
        yield clean(phone), clean(fax)
        ...

def clean(s, default=''):
    if s is None:
        return default
    return s

如果你really更喜欢坚持使用Pandas , 你可能想要

  1. 找出df.Phone包含‘Fax’的行的掩码,然后
  2. 将该子集复制到df['Fax'],然后
  3. 删除选定的df['Phone']个条目.

您可以自己验证/调试每个步骤--GET(1)是正确的 在继续try (2)之前.

如果你 Select 走这条路,please post是你的最终解决方案.

Python相关问答推荐

替换现有列名中的字符,而不创建新列

BeautifulSoup:超过24个字符(从a到z)的迭代失败:降低了首次深入了解数据集的复杂性:

如何在GEKKO中使用复共轭物

如何在PythonPandas 中对同一个浮动列进行逐行划分?

如何在Python中自动创建数字文件夹和正在进行的文件夹?

Pandas:将值从一列移动到适当的列

有了Gekko,可以创建子模型或将模型合并在一起吗?

牛郎星直方图中分类列的设置顺序

如何导入与我试图从该目录之外运行的文件位于同一目录中的Python文件?

有没有一种简单的方法来访问Polars struct 中的值?

Chrome 122-如何允许不安全的内容?(不安全下载被阻止)

有没有更python的方法来复制python中列表的第n个元素?例如,使用列表理解

使用Numpy进行重写For循环矢量化

同一单元格中有两个条目的NumPy矩阵不起作用

C++和NumPy之间的Python绑定中复杂的C++生命周期问题

使用Pandas 遍历词典

将polars框架中的列组合并为单个列

为什么在涉及int和调用str()的多重继承的情况下,Python3.7和3.10的MRO似乎有所不同?

如何在Polars数据框中查找列表数据类型列中的最大值

如何在Django中使用使用数学过滤器的If Else条件?