我有一个地址数据框,包括邮政编码。我试图通过从有效邮政编码的文本文件中导入列表来查看这些邮政编码是否有效。我似乎无法从列表或数据框中获取正确的数据类型。
我的列表在文本文件
中看起来像这样00501, 00544, 00601, 00602, 00603, 00604, 00605, 00606, 00610, 00611, 00612, 00613, 00614, 00616, 00617, 00622, 00623, 00624, 00627, 00631, 00636, 00637, 00638, 00641, 00646, 00647, 00650, 00652, 00653, 00656, 00659, 00660, 00662, 00664, 00667, 00669, 00670, 00674, 00676, 00677, 00678, 00680, 00681, 00682, 00683, 00685, 00687, 00688, 00690, 00692, 00693, 00694, 00698, 00703, 00704, 00705, 00707, 00714, 00715, 00716, 00717, 00718, 00719, 00720, 00721, 00723, 00725, 00726.....
我正在导入列表......
text_file = open("/C:/valid_zipcodes.txt", "r")
zip_codes = text_file.readlines()
我希望在功能中返回一个bool。如果我在代码
中创建一个非常简单的列表,这是有效的zip_codes2 = [12401,12603]
df['valid_zip'] = df['Zip Code'].isin(zip_codes)
>>valid_zip True
print(df.dtypes)
>>Zip Code int64
我已尝试使用以下对象的数据类型,它已更改为object,但无法从文本文件中找到它在列表中的对应项。即使我将文本文件调整为阅读' 12345' 12346'。
df['Zip Code'] = df['Zip Code'].astype(str)
有人有任何想法吗?
答案 0 :(得分:5)
你需要用“,”拆分。另请注意,readlines
返回list
,每行一个元素。您的输入文件似乎只包含一行,因此您需要提取列表的第一个元素。
最后,您需要确保将字符串与字符串或整数与整数进行比较。在下面的示例中,我假设前导0
很重要,并且在整个过程中比较字符串。
from io import StringIO
text_file = StringIO('00501, 00544, 00601, 00602, 00603, 00604')
## create set of zip codes
zip_codes = set(text_file.readlines()[0].split(', '))
## input series of strings
s = pd.Series(['00501', '00544', '00601', '00605'])
s_res = s.isin(zip_codes).tolist()
# [True, True, True, False]
## input series of integers
t = pd.Series([501, 544, 601, 605])
t_res = t.astype(str).str.zfill(5).isin(zip_codes).tolist()
# [True, True, True, False]