[英]Masking Zip Codes with a For Loop Python Pandas
我正在尝试编写一个 for 循环,循环遍历数据框并根据人口分配给定 zip 代码的 0 或前三位数字。 我的助教说我需要修复第二行以遍历索引而不是数据帧的长度,但我不确定如何前进。 这是问题和我的代码。
“在这部分,您应该编写一个 for 循环,通过每个用户更新 df_users dataframe.Go,并更新他们的 zip 代码,以符合安全港规范:如果用户来自 zip 代码,“地理细分”是小于等于 20,000,将 df_users 中的 zip 代码更改为“0”(作为字符串)。否则,zip 应该只是完整 zip 代码的前 3 个数字。通过直接更新 df_users 的 zip 列来完成所有这些操作DataFrame。”
for item in range(0, len(df_users)):
population = zip_dict[df_zip.loc[item, 'population']]
if population <= 20000:
df_users.loc[item, 'zip'] = '0'
else:
new_zip = (df_users.loc[item, 'zip'])[:3]
df_users.loc[item, 'zip'] = new_zip
.apply
和np.where
for-loop
,这会导致性能不佳。import pandas as pd
import numpy as np
# dataframe example
df = pd.DataFrame({'pop': [10000, 20000, 30000], 'zip': [12345, 97000, 87390]})
pop zip
10000 12345
20000 97000
30000 87390
# update zip based on pop
df['zip'] = df.apply(lambda x: np.where(x['pop'] < 20000, '0', str(x['zip'])[:3]), axis=1)
pop zip
10000 0
20000 970
30000 873
for-loop
pandas
反模式range(0, len(df_users))
从0, 1, ..., len(df)-1
生成一个列表,但是,索引可能不是从0, 1, ...
开始的数字排序。 这可能就是您被指示更改为df.index
的原因(df_users.loc[item, 'zip'])[:3]
不能与int
一起使用,这就是使用str(df.loc[i, 'zip'])[:3]
的原因。 如果zip
列是object
或者str
类型,那么可以使用df.loc[i, 'zip'][:3]
for i in df.index:
pop = df.loc[i, 'pop']
if pop < 20000:
df.loc[i, 'zip'] = '0'
else:
df.loc[i, 'zip'] = str(df.loc[i, 'zip'])[:3]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.