我有一个地址的数据框,包括邮政编码。我试图通过从一个包含有效邮政编码的文本文件中导入一个列表来查看这些邮政编码是否有效。我似乎无法从列表或数据帧中获取正确的数据类型。
我的列表在文本文件中是这样的
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()
我想用is in函数返回一个bool。如果我在代码中创建一个非常简单的列表
zip_codes2 = [12401,12603]
df['valid_zip'] = df['Zip Code'].isin(zip_codes)
>>valid_zip True
print(df.dtypes)
>>Zip Code int64
我尝试用下面的方法将数据类型设置为object,它已更改为object,但在文本文件的列表中找不到它的对应项。即使我把文本文件调整为“12345”和“12346”。
df['Zip Code'] = df['Zip Code'].astype(str)
有人有什么想法吗?
最佳答案
你需要按“,”分开。还要注意,readlines
返回一个list
,每行一个元素。您的输入文件似乎只包含一行,因此您需要提取列表的第一个元素。
最后,需要确保将字符串与字符串或整数与整数进行比较。在下面的示例中,我假设前导0
s是重要的,并对整个字符串进行比较。
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]
关于python - 从文本文件导入列表以使用isin()与数据框进行比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50647587/