我拥有超过20亿行和16列的海量数据集。
其中两列是纬度和经度,另一列是DateTime。
由于数据是原始的,我正在尝试对其进行消毒。在此过程中,我遇到了一些纬度经度行,其中包含日期时间,其被视为string
,纬度和经度为float
。
我正在使用re
进行其他预处理,但在这里我无法做到。
我想删除除这两列中除纬度和经度以外的任何其他行。
我在python和pandas中寻找一些简单的解决方案,它只会删除那些行,并保持数据集的其余部分不变。
修改:输入迷你版本已共享here。最后两列为latitude & Longitude
,前一列为datetime
第10行,为我提到的错误。
赞助帮助..谢谢!
答案 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