如何使数据框进入特定范围
How to make a dataframe into certain rannge
这是我的数据集
Address Latitude Longitude
Bandar Udara Sultan Aji Muhammad Sulaiman -12.658.151 1.168.977.258
Bandar Udara Halim Perdanakusuma -62.652.088 1.068.863.459
Bandar Udara Internasional Sultan Mahmud Badaruddin II -28.947.992 1.047.046.471
Bandar Udara Internasional Zainuddin Abdul Madjid -8.761.939 1.162.735.566
Bandar Udara Internasional Sultan Syarif Kasim II 4.645.874 1.014.477.217
纬度的取值范围在-10到10之间,经度取值范围在100到200之间,所以我们把它们分开来做标准的经纬度值。
这是我预期的数据集
Address Latitude Longitude
Bandar Udara Sultan Aji Muhammad Sulaiman -1.2658151 116.8977258
Bandar Udara Halim Perdanakusuma -6.2652088 106.8863459
Bandar Udara Internasional Sultan Mahmud Badaruddin II -2.8947992 104.7046471
Bandar Udara Internasional Zainuddin Abdul Madjid -8.761939 116.2735566
Bandar Udara Internasional Sultan Syarif Kasim II 4.645874 101.4477217
这是一个非常定制的解决方案,它考虑到您的坐标具有特定范围这一事实:更具体地说,经度总是在小数点前有三位数字,而纬度总是有一位(减号是可选的)。
基本上,您首先删除所有点,然后分别在经度和纬度的 3 位或 1 位数字后插入一个点。
import numpy as np
import pandas as pd
# Longitude
df['Longitude'] = df['Longitude'].str.replace('\.', '', regex=True)
df['Longitude'] = (df['Longitude'].str[:3] + '.' + df['Longitude'].str[3:]).astype(float)
# Latitude
negative_lat = df['Latitude'].str.startswith('-')
df['Latitude'] = df['Latitude'].str.replace('\.|-', '', regex=True)
df['Latitude'] = (df['Latitude'].str[:1] + '.' + df['Latitude'].str[1:]).astype(float)
df['Latitude'] = np.where(negative_lat, -1 * df['Latitude'], df['Latitude'])
print(df.dtypes)
print(df)
# Address object
# Latitude float64
# Longitude float64
# dtype: object
# Address Latitude Longitude
# 0 Bandar Udara Sultan Aji Muhammad Sulaiman -1.265815 116.897726
# 1 Bandar Udara Halim Perdanakusuma -6.265209 106.886346
# 2 Bandar Udara Internasional Sultan Mahmud Badar... -2.894799 104.704647
# 3 Bandar Udara Internasional Zainuddin Abdul Madjid -8.761939 116.273557
# 4 Bandar Udara Internasional Sultan Syarif Kasim II 4.645874 101.447722
这是我的数据集
Address Latitude Longitude
Bandar Udara Sultan Aji Muhammad Sulaiman -12.658.151 1.168.977.258
Bandar Udara Halim Perdanakusuma -62.652.088 1.068.863.459
Bandar Udara Internasional Sultan Mahmud Badaruddin II -28.947.992 1.047.046.471
Bandar Udara Internasional Zainuddin Abdul Madjid -8.761.939 1.162.735.566
Bandar Udara Internasional Sultan Syarif Kasim II 4.645.874 1.014.477.217
纬度的取值范围在-10到10之间,经度取值范围在100到200之间,所以我们把它们分开来做标准的经纬度值。
这是我预期的数据集
Address Latitude Longitude
Bandar Udara Sultan Aji Muhammad Sulaiman -1.2658151 116.8977258
Bandar Udara Halim Perdanakusuma -6.2652088 106.8863459
Bandar Udara Internasional Sultan Mahmud Badaruddin II -2.8947992 104.7046471
Bandar Udara Internasional Zainuddin Abdul Madjid -8.761939 116.2735566
Bandar Udara Internasional Sultan Syarif Kasim II 4.645874 101.4477217
这是一个非常定制的解决方案,它考虑到您的坐标具有特定范围这一事实:更具体地说,经度总是在小数点前有三位数字,而纬度总是有一位(减号是可选的)。
基本上,您首先删除所有点,然后分别在经度和纬度的 3 位或 1 位数字后插入一个点。
import numpy as np
import pandas as pd
# Longitude
df['Longitude'] = df['Longitude'].str.replace('\.', '', regex=True)
df['Longitude'] = (df['Longitude'].str[:3] + '.' + df['Longitude'].str[3:]).astype(float)
# Latitude
negative_lat = df['Latitude'].str.startswith('-')
df['Latitude'] = df['Latitude'].str.replace('\.|-', '', regex=True)
df['Latitude'] = (df['Latitude'].str[:1] + '.' + df['Latitude'].str[1:]).astype(float)
df['Latitude'] = np.where(negative_lat, -1 * df['Latitude'], df['Latitude'])
print(df.dtypes)
print(df)
# Address object
# Latitude float64
# Longitude float64
# dtype: object
# Address Latitude Longitude
# 0 Bandar Udara Sultan Aji Muhammad Sulaiman -1.265815 116.897726
# 1 Bandar Udara Halim Perdanakusuma -6.265209 106.886346
# 2 Bandar Udara Internasional Sultan Mahmud Badar... -2.894799 104.704647
# 3 Bandar Udara Internasional Zainuddin Abdul Madjid -8.761939 116.273557
# 4 Bandar Udara Internasional Sultan Syarif Kasim II 4.645874 101.447722