我正在处理一个包含“纬度”和“经度”列的百万行CSV数据集,我想基于此创建一个名为“州”的新列,该列是包含这些坐标的美国州。
import pandas as pd
import numpy as np
import os
from uszipcode import ZipcodeSearchEngine
def convert_to_state(coord):
lat, lon = coord["latitude"], coord["longitude"]
res = search.by_coordinate(lat, lon, radius=1, returns=1)
state = res.State
return state
def get_state(path):
with open(path + "USA_downloads.csv", 'r+') as f:
data = pd.read_csv(f)
data["state"] = data.loc[:, ["latitude", "longitude"]].apply(convert_to_state, axis=1)
get_state(path)
我一直收到一个错误信息“ DtypeWarning:列(4,5)具有混合类型。指定导入时的 dtype 选项或将 low_memory = False。” 第4和5列对应纬度和经度。我不明白如何使用.apply来完成此任务,或者.apply是否是正确的方法。 我该怎么做?
data = pd.read_csv(f, low_memory=False)
,然后编辑您的问题以包括此行的输出:print(df.dtypes)
。进一步保护您的res = search.by_coordinate...
在一个try .. except
子句中,并打印引发异常的纬度和经度。我认为解决dtype
冲突也将解决uszipcode
引发的TypeError
。 - Kartikuszipcode
上。你有两个选择,要么使用另一个包,要么按照我回答的后半部分进行更改。问题是,如果你进行更改,你的程序将正常工作,但是对于一些点,uszipcode
会引发错误,你将无法获得信息。 - Kartikdata.dtypes
输出,纬度和经度列的类型为“对象”。这意味着某些纬度和经度不是严格的数字。您需要深入挖掘数据并找出哪些行没有数字。这在长期运行中也将非常有用。 - Kartik