2016-08-06 7 views
2

「latitude」と「longitude」の列を含む100万行のCSVデータセットを使用しています。これらの座標を含む米国の州である「state」という名前の列に基づいて新しい列を作成したいとします。パンダで.applyを使用する正しい方法は何ですか?

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オプションを指定して種類を混合またはFalse = low_memory設定しました。"列4および列5は、緯度および経度に対応する。私は、この仕事を完了するために.applyをどのように使うのか、.applyがその仕事のための正しい方法であるのか理解できません。私はどのように進めるべきですか?

答えて

3

私は、これはあなたのプログラムの高速化実装になると信じて:

import pandas as pd 
import numpy as np 
import os 
from uszipcode import ZipcodeSearchEngine 

def convert_to_state(lat, lon): 
    lat, lon = round(lat, 7), round(lon, 7) 
    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"] = np.vectorize(convert_to_state)(data["latitude"].values, data["longitude"].values) 

get_state(path) 

それは(それはまだループですが)少し物事をスピードアップするためにnumpy.vectorizeを使用し、その後、得られた値との関数を呼び出しますあなたのDataFrameの'latitude''longitude'列からnumpy.ndarrayに変換されました(.values属性がそれを行います)。あなたが.apply()を使用し続けたい場合は


、あなたが行うことができます:

state = data.apply(lambda x: convert_to_state(x['latitude'], x['longitude']), axis=1) 
data["state"] = state 

編集

TypeErrorを上げからuszipcodeを避けるために、これを使用する:

def convert_to_state(lat, lon): 
    try: 
     res = search.by_coordinate(lat, lon, radius=1, returns=1) 
     state = res.State 
    except TypeError as TE: 
     state = None 
    return state 

uszipcodeをさらにデバッグしたい場合、その原因が原因でエラーが発生した場合は、別の質問に適切なタグを付けてください。誰かがあなたを助けます。私はこのパッケージの経験がないので、あまり役に立たないかもしれません。

+0

あなたは最高です。あなたの説明をありがとう!これは素晴らしいです! – user1917407

+1

@ user1917407、ありがとうございます!お役に立てて嬉しいです。 – Kartik

+0

私はこれに実際に補遺を作りましょう。もう少し手探りをした後も、私は以前と同じ問題が原因であるとは確信していませんが、まだいくつかの問題に取り組んでいます。ここでエラーログの緯度の値は緯度よりはるかに長いことがわかりますが、この異常はCSVファイル自体にはまったくありません。何がこの問題を引き起こす可能性があるかについての任意のアイデア? http://pastebin.com/HZeZGNf2 – user1917407

関連する問題