我的数据示例

StreetAddress City State Zip
1 Main St 01123 Winsted CT
1 Main St Winsted CT 01123

我正在try 使用regex和pandas来清理一个Electron 表格,我有. 我遇到的问题是,我的regex代码替换了整个列中的每个单元格,即使其中有有效数据.

我试

df['Zip'] = df['StreetAddress'].str.extract(r'(\d{5})')
df['StreetAddress'] = df['StreetAddress'].str.replace(r'(\d{5})', '', regex=True)

这给了我

StreetAddress City State Zip
1 Main St Winsted CT 01123
1 Main St Winsted CT

我希望能有更像这样的东西

StreetAddress City State Zip
1 Main St Winsted CT 01123
1 Main St Winsted CT 01123

推荐答案

我会使用一个布尔掩码,这将避免删除现有数据,而且也更有效,因为只有相关的行将被判断:

add = df['StreetAddress'].str.extract(r'(\d{5})', expand=False)
m = add.notna()
df.loc[m, 'Zip'] = add[m]
df.loc[m, 'StreetAddress'] = (df.loc[m, 'StreetAddress']
                                .str.replace(r' *\d{5}', '', regex=True)
                             )

或者:

df['Zip'] = df['StreetAddress'].str.extract(r'(\d{5})', expand=False).fillna(df['Zip'])

或者,如@ouroboros1所建议的,保留原始Zip:

df['Zip'].fillna(df['StreetAddress'].str.extract(r'(\d{5})', expand=False))

输出:

  StreetAddress     City State    Zip
0     1 Main St  Winsted    CT  01123
1     1 Main St  Winsted    CT  01123

Python相关问答推荐

当密钥是复合且唯一时,Pandas合并抱怨标签不唯一

比较两个二元组列表,NP.isin

三个给定的坐标可以是矩形的点吗

更改matplotlib彩色条的字体并勾选标签?

仿制药的类型铸造

抓取rotowire MLB球员新闻并使用Python形成表格

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

什么是最好的方法来切割一个相框到一个面具的第一个实例?

python中的解释会在后台调用函数吗?

使用Python从rotowire中抓取MLB每日阵容

Matplotlib中的字体权重

在pandas/python中计数嵌套类别

使用字典或列表的值组合

如何在Python Pandas中填充外部连接后的列中填充DDL值

有没有办法让Re.Sub报告它所做的每一次替换?

用0填充没有覆盖范围的垃圾箱

Matplotlib中的曲线箭头样式

将像素信息写入文件并读取该文件

如何在PYTHON中向单元测试S Side_Effect发送额外参数?

.awk文件可以使用子进程执行吗?