主要是记录一个采坑的过程. 当字符串 的 " " 和 pandas 中的 " " , NaN不是一个概念 .
需求
一个小伙伴要用 pandas 来处理一个, 表格填充的的问题, 脱敏数据大致是这样的.
区域名称 | 门店 | 店组 |
---|---|---|
龙华新城大区 | 壹城中心店 | 壹城中心一组 |
益田大区 | 皇岗口岸店 | 皇岗口岸一组 |
双龙大区 | 龙城中央旗舰店 | AAA店 |
深西大区 | 德佑麒麟A组 | |
A宏畅房地产经纪有限责任公司 | A地产经纪有限责任公司门店 | |
宏畅房地产经纪有限责任公司 | B地产经纪有限责任公司门店 | |
东部 | 微地产瑞凯洪湖A店 | |
景恒房地产有限公司 | D景恒房地产有限公司门店 | |
龙华新城大区 | 丰润花园店 | 丰润花园一组 |
现在想取一个 门店 字段, 新增或者覆盖 都可以, 取的逻辑是: "获取 门店 字段的值, 如果是空值, 则选择 店组 字段的值.
咋一看, (不考虑性能, 只管实现哈), 这不简单嘛,都不想考虑用什么 apply, 遍历 DataFrame 的每一行, 然后判断就好了.
踩过过程
通常我是先测试下, 与其说是测试, 其实就是百度下api, 根本就记不住的, 要是没有搜索引擎, 写代码立刻就废掉了.
先来波测试
import pandas as pd
df = pd.DataFrame({
"a":[1,2,3,4,5,6],
"门店": ["甲店", "", "", "丙店", "", "丁店"],
"店组": ["DD", "", "AA", "", "丁店", ""]
})
print(df)
a 门店 店组
0 1 甲店 DD
1 2
2 3 AA
3 4 丙店
4 5 丁店
5 6 丁店
为了演示方便, 这里选择新增 "新门店"字段, 不覆盖原来的哦 (如果 "门店", 没有值, 就取 "店组" 的值)
for 行号, 行值 in df.iterrows():
df.loc[行号, "新门店"] = 行值['门店'] or 行值["店组"]
print(df)
a 门店 店组 新门店
0 1 甲店 DD 甲店
1 2
2 3 AA AA
3 4 丙店 丙店
4 5 丁店 丁店
5 6 丁店 丁店
测试完美通过, 然后就开始整了.
翻车1次
df = pd.read_excel("门店选择.xlsx")
# 新增 "新门店"字段 也行 如果 "门店", 没有值, 就取 "店组" 的值
for 行号, 行值 in df.iterrows():
df.loc[行号, "新门店"] = 行值['门店'] or 行值["店组"]
print(df)
区域名称 | 门店 | 店组 | 新门店 | |
---|---|---|---|---|
0 | 龙华新城大区 | 壹城中心店 | 壹城中心一组 | 壹城中心店 |
1 | 益田大区 | 皇岗口岸店 | 皇岗口岸一组 | 皇岗口岸店 |
2 | 双龙大区 | 龙城中央旗舰店 | AAA店 | 龙城中央旗舰店 |
3 | 深西大区 | NaN | 德佑麒麟A组 | NaN |
4 | A宏畅房地产经纪有限责任公司 | A地产经纪有限责任公司门店 | NaN | A地产经纪有限责任公司门店 |
5 | 深圳市宏畅房地产经纪有限责任公司 | NaN | B地产经纪有限责任公司门店 | NaN |
6 | 东部 | 微地产瑞凯洪湖A店 | NaN | 微地产瑞凯洪湖A店 |
7 | 深圳市景恒房地产有限公司 | NaN | D景恒房地产有限公司门店 | NaN |
8 | 龙华新城大区 | 丰润花园店 | 丰润花园一组 | 丰润花园店 |