首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在子字符串中筛选并移动另一列中的文本

在子字符串中筛选并移动另一列中的文本
EN

Stack Overflow用户
提问于 2022-09-30 22:44:04
回答 2查看 71关注 0票数 3

我有以下数据集:

代码语言:javascript
复制
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'}]
)

应该是这样的:

我试图做的是:对于我看到的每一行“传真”,我想截断它,并将此记录传送到“传真”列。

首先,我试图只查询与此筛选的匹配:

代码语言:javascript
复制
df[df['Phone'].str.contains("Fax") == True, "Fax"] = df[df['Phone'].str.contains("Fax") == True]

但是它不起作用,错误是:"TypeError: unhashable type:'Series'“。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-30 22:52:31

你有一堆行,也就是说,一串数据。最简单的方法是在将每一行添加到dataframe之前对其进行按摩。

代码语言:javascript
复制
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

代码语言:javascript
复制
        ...
        yield clean(phone), clean(fax)
        ...

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

如果你真的喜欢坚持使用熊猫,你可能会想

  1. 识别df.Phone包含“传真”的行的掩码,然后
  2. 将该子集复制到df['Fax']中,然后
  3. 空出选定的df['Phone']条目。

您可以自行验证/调试每个步骤

如果你选择走这条路,请邮寄你的最终解决方案。

票数 2
EN

Stack Overflow用户

发布于 2022-10-01 01:38:50

使用.分配np.where的另一个选项

代码语言:javascript
复制
import numpy as np
import pandas as pd



condition = df["Phone"].str.contains("fax", case=False)
df = df.assign(
    Fax=np.where(condition, df["Phone"], df["Fax"]),
    Phone=np.where(condition, "", df["Phone"])
).fillna("")

print(df)

                 Phone                 Fax
0                        Fax(925) 482-1195
1                        Fax(406) 226-0317
2                       Fax+1 650-383-6305
3  Phone(334) 585-1171   Fax(334) 585-1182
4                                         
5  Phone(334) 585-1171   Fax(334) 585-1176
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73914589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档