elb*_*kim 3 python dataframe pandas
我在Latitude数据集中有坐标,每个数据集都以字母结尾(例如N).
仅检索数字并替换原始值的最佳方法是什么?
我的尝试是:
raw['LATITUDE'] = raw.loc[(raw['LATITUDE'].str.len() == 9)].str[0:8]
Run Code Online (Sandbox Code Playgroud)
但是我得到了一条AttributeError消息.
AttributeError: 'DataFrame' object has no attribute 'str'
Run Code Online (Sandbox Code Playgroud)
我也尝试用正则表达式替换值,但我不确定如何使它成功.
我很感激任何建议,谢谢.
好的,让我们澄清一些事情:
你好像在使用混合dtypes.打印raw['LATITUDE'].apply(type).nunique()确认; 它应该> 1.
您正在使用地理数据.你的许多值都是无效的(0),我建议将其强制转换为NaN,因为它更有意义地代表缺失的数据
要解决您的问题,请尝试将所有内容添加到最后一个字符(:-1):
raw['LATITUDE'] = raw['LATITUDE'].str[:-1].astype(float)
raw
LATITUDE
0 NaN
1 38.72496
2 39.90272
3 38.72927
4 39.91152
5 39.84841
6 NaN
7 NaN
8 NaN
9 39.84941
Run Code Online (Sandbox Code Playgroud)
这工作虽然混合dtypes你的塔中,因为str访问被设计成非字符串行强制为NaN.
如果你想保留0(我不推荐),使用快速替换功能,如np.where;
raw['LATITUDE'] = np.where(
raw.LATITUDE.eq(0), 0, raw['LATITUDE'].str[:-1].astype(float)
)
raw
LATITUDE
0 0.00000
1 38.72496
2 39.90272
3 38.72927
4 39.91152
5 39.84841
6 0.00000
7 0.00000
8 0.00000
9 39.84941
Run Code Online (Sandbox Code Playgroud)
我不建议保留0的原因是因为使用NaN划分缺失数据而不是0来在语义上更有意义.