我有一个地址的数据框架,包括邮政编码。我正在尝试通过从有效邮政编码的文本文件中导入列表来查看这些邮政编码是否有效。我似乎无法从列表或数据帧中获得正确的数据类型。
我的列表在文本文件中如下所示
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函数的布尔值。如果我在代码中创建了一个非常简单的列表,这将会起作用
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)
有人有什么想法吗?
发布于 2018-06-02 00:32:33
你需要用",“拆分。还要注意,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]
https://stackoverflow.com/questions/50647587
复制相似问题