从地理坐标

时间:2017-06-08 05:27:48

标签: python-3.x pandas datetime dataset latitude-longitude

我拥有超过20亿行和16列的海量数据集。

其中两列是纬度和经度,另一列是DateTime。

由于数据是原始的,我正在尝试对其进行消毒。在此过程中,我遇到了一些纬度经度行,其中包含日期时间,其被视为string,纬度和经度为float

我正在使用re进行其他预处理,但在这里我无法做到。

我想删除除这两列中除纬度和经度以外的任何其他行。

我在python和pandas中寻找一些简单的解决方案,它只会删除那些行,并保持数据集的其余部分不变。

修改:输入迷你版本已共享here。最后两列为latitude & Longitude,前一列为datetime第10行,为我提到的错误。

赞助帮助..谢谢!

1 个答案:

答案 0 :(得分:1)

如果所有值均为strings,则存在差异:

df = pd.DataFrame({'lat':[10,20,'d'], 'lon':[4,'hh', 7]}).astype(str)

mask = pd.to_numeric(df['lat'], errors='coerce').notnull() & 
       pd.to_numeric(df['lon'], errors='coerce').notnull()

df = df[mask]
print (df)
  lat lon
0  10   4

或者值是混合的 - 有些是数字的,有些是字符串:

df = pd.DataFrame({'lat':[10,20,'d'], 'lon':[4,'hh', 7]})

mask = (df['lat'].apply(type) != str) & (df['lon'].apply(type) != str)

df = df[mask]
print (df)
  lat lon
0  10   4

编辑:

df = pd.read_csv('twt_mini_stack.csv')
#print (df)

mask = pd.to_numeric(df['Lat'], errors='coerce').notnull() &  \
       pd.to_numeric(df['Long'], errors='coerce').notnull()

df = df[mask]
print (df[['Tweeted Datetime','Lat','Long']])
        Tweeted Datetime       Lat      Long
0   3:59 PM - 1 Jan 2016  35.68501  139.7514
1   3:59 PM - 1 Jan 2016  35.68501  139.7514
2   3:59 PM - 1 Jan 2016  35.68501  139.7514
3   3:59 PM - 1 Jan 2016  35.68501  139.7514
4   3:59 PM - 1 Jan 2016  35.68501  139.7514
5   3:59 PM - 1 Jan 2016  35.68501  139.7514
6   3:59 PM - 1 Jan 2016  35.68501  139.7514
7   3:59 PM - 1 Jan 2016  35.68501  139.7514
9   3:58 PM - 1 Jan 2016  35.68501  139.7514
10  3:58 PM - 1 Jan 2016  35.68501  139.7514
11  3:58 PM - 1 Jan 2016  35.68501  139.7514
12  3:58 PM - 1 Jan 2016  35.68501  139.7514
13  3:58 PM - 1 Jan 2016  35.68501  139.7514