我有一个脚本,我从csv文件中读取了一些zipcodes。 zipcodes的格式如下:
zipcode
75180
90672
01037
20253
09117
31029
07745
90453
12105
18140
36108
10403
76470
06628
93105
88069
31094
84095
63069
然后我运行一个脚本:
import requests
import pandas as pd
import time
file = '/Users/zipcode.csv'
reader = pd.read_csv(file, sep=';', encoding='utf-8-sig')
zipcodes = reader["zipcode"].astype(str)
base_url = "https://api.blabla/?zipcode={zipcode}"
headers = {'Authentication': 'random'}
for zipcode in zipcodes:
url = base_url.format(zipcode=zipcode)
r = requests.get(url,
headers=headers)
for r_info in r.json()["data"]:
print zipcode,r_info["id"]
time.sleep(0.5)
但是,只要有一个以0开头的邮政编码,我得到的结果是4位数,它不能与实际的0匹配。 我已经格式化了我的csv以在其中包含文本列,但它仍然无法正常工作。
我得到的邮政编码是这样的:
zipcode
75180
90672
1037
20253
9117
31029
7745
90453
12105
18140
36108
10403
76470
6628
93105
88069
31094
84095
63069
你知道如何解决这个问题吗?
答案 0 :(得分:5)
您需要将dtype
作为str
传递:
reader = pd.read_csv(file, sep=';', encoding='utf-8-sig', dtype=str)
将这些值读作str:
In [152]:
import pandas as pd
import io
t="""zipcode
75180
90672
01037
20253
09117
31029
07745
90453
12105
18140
36108
10403
76470
06628
93105
88069
31094
84095
63069"""
df = pd.read_csv(io.StringIO(t), dtype=str)
df
Out[152]:
zipcode
0 75180
1 90672
2 01037
3 20253
4 09117
5 31029
6 07745
7 90453
8 12105
9 18140
10 36108
11 10403
12 76470
13 06628
14 93105
15 88069
16 31094
17 84095
18 63069
默认情况下,pandas嗅探dytpes
,在这种情况下,它认为它们是数字的,因此你会失去前导零
您也可以通过转换为str
然后使用矢量化str.zfill
来执行此操作作为后处理步骤:
In [154]:
df['zipcode'] = df['zipcode'].astype(str).str.zfill(5)
df
Out[154]:
zipcode
0 75180
1 90672
2 01037
3 20253
4 09117
5 31029
6 07745
7 90453
8 12105
9 18140
10 36108
11 10403
12 76470
13 06628
14 93105
15 88069
16 31094
17 84095
18 63069