我有一个脚本,我从csv文件中读取一些zipcodes.zipcodes的格式如下:
zipcode
75180
90672
01037
20253
09117
31029
07745
90453
12105
18140
36108
10403
76470
06628
93105
88069
31094
84095
63069
Run Code Online (Sandbox Code Playgroud)
然后我运行一个脚本:
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)
Run Code Online (Sandbox Code Playgroud)
但是,每当有一个以0开头的邮政编码时,我得到的结果是4位数,它与实际的0不匹配.我已经格式化了我的csv,其中有一个文本列,但它仍然不起作用.
我得到的zipcodes是这样的:
zipcode
75180
90672
1037
20253
9117
31029
7745
90453
12105
18140
36108
10403
76470
6628
93105
88069
31094
84095
63069
Run Code Online (Sandbox Code Playgroud)
你知道如何解决这个问题吗?
你需要传递dtypeas str:
reader = pd.read_csv(file, sep=';', encoding='utf-8-sig', dtype=str)
Run Code Online (Sandbox Code Playgroud)
将这些值读作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
Run Code Online (Sandbox Code Playgroud)
默认情况下,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |