如何读取 CSV,再添加两列,并插入依赖于当前列的数据?
How can I read a CSV, add two more columns, and insert data that is dependent on the current columns?
我有一个看起来像这样但更长的 csv:
ID
Address
32
54298 Boca Chica Blvd Brownsville, TX
31
6640 Washington St, Yountville, CA 94599
我正在尝试遍历 csv,使用 geopy 获取每个地址的纬度和经度,然后将它们插入第 3 列和第 4 列,如下所示:
ID
Address
Latitude
Longitude
32
54298 Boca Chica Blvd Brownsville, TX
34.5165131
90.1656516
31
6640 Washington St, Yountville, CA 94599
26.1231
51.516125
它是在同一个旧的 csv 中(这就是我正在尝试的),还是在一个新的 csv 中并不重要。我读过的以前的帖子要么侧重于附加整行而不是列,要么只是用手 typed/hard 编码到 python 脚本中的数据填充新列。
到目前为止,我能够遍历并获取纬度和经度。我遇到的问题主要是在写作部分。这是我的。
import geopy
import pandas as pd
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="sample app")
df = pd.read_csv(r"C:\Users\Desktop\LatLongTest.csv")
for row in df.itertuples():
try:
data = geolocator.geocode(row[7])
print(data.point.latitude)
except AttributeError:
print('error')
如有任何帮助,我们将不胜感激!我以前只有一点 Java 的经验。 Python 的文档和已发布的示例对我来说不像 Java 的那样直观,因此入门有点挑战。
您只需要添加列,然后保存 df
数据框。另见 Adding new column to existing DataFrame in Python pandas
您可以尝试这样的操作:
import geopy
import pandas as pd
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="sample app")
df = pd.read_csv(r"C:\Users\Desktop\LatLongTest.csv")
# add new columns
df['Longitude'] = 0
df['Latitude'] = 0
# process all rows
for row in df.itertuples():
try:
data = geolocator.geocode(row[7])
df.at[row.Index, 'Longitude'] = data.point.longitude
df.at[row.Index, 'Latitude'] = data.point.latitude
except AttributeError:
print('error')
# write to output
df.to_csv(r"C:\Users\Desktop\LatLongTest_2.csv", sep=";", index=False)
使用我将展示的这种方法,您需要创建两个列表,一个包含纬度,另一个包含经度,然后作为列附加到您的 DataFrame。
提醒一下,它们的行数必须相同,否则会报错。
import pandas as pd
df = pd.read_csv(r"C:\Users\Desktop\LatLongTest.csv")
add_to_df = {'Latitude': LatitudeList, 'Longitude': LongitudeList}
df = df.append(pd.DataFrame(add_to_df))
df
也可以这样做,每行加一个值:
import pandas as pd
df = pd.read_csv(r"C:\Users\Desktop\LatLongTest.csv")
df.loc[df.Adress == '54298 Boca Chica Blvd Brownsville, TX', "Latitude"] = Latitude
df.loc[df.Adress == '54298 Boca Chica Blvd Brownsville, TX', "Longitude"] = Longitude
df
您可以在 this link
查看更多资源
我有一个看起来像这样但更长的 csv:
ID | Address |
---|---|
32 | 54298 Boca Chica Blvd Brownsville, TX |
31 | 6640 Washington St, Yountville, CA 94599 |
我正在尝试遍历 csv,使用 geopy 获取每个地址的纬度和经度,然后将它们插入第 3 列和第 4 列,如下所示:
ID | Address | Latitude | Longitude |
---|---|---|---|
32 | 54298 Boca Chica Blvd Brownsville, TX | 34.5165131 | 90.1656516 |
31 | 6640 Washington St, Yountville, CA 94599 | 26.1231 | 51.516125 |
它是在同一个旧的 csv 中(这就是我正在尝试的),还是在一个新的 csv 中并不重要。我读过的以前的帖子要么侧重于附加整行而不是列,要么只是用手 typed/hard 编码到 python 脚本中的数据填充新列。
到目前为止,我能够遍历并获取纬度和经度。我遇到的问题主要是在写作部分。这是我的。
import geopy
import pandas as pd
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="sample app")
df = pd.read_csv(r"C:\Users\Desktop\LatLongTest.csv")
for row in df.itertuples():
try:
data = geolocator.geocode(row[7])
print(data.point.latitude)
except AttributeError:
print('error')
如有任何帮助,我们将不胜感激!我以前只有一点 Java 的经验。 Python 的文档和已发布的示例对我来说不像 Java 的那样直观,因此入门有点挑战。
您只需要添加列,然后保存 df
数据框。另见 Adding new column to existing DataFrame in Python pandas
您可以尝试这样的操作:
import geopy
import pandas as pd
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="sample app")
df = pd.read_csv(r"C:\Users\Desktop\LatLongTest.csv")
# add new columns
df['Longitude'] = 0
df['Latitude'] = 0
# process all rows
for row in df.itertuples():
try:
data = geolocator.geocode(row[7])
df.at[row.Index, 'Longitude'] = data.point.longitude
df.at[row.Index, 'Latitude'] = data.point.latitude
except AttributeError:
print('error')
# write to output
df.to_csv(r"C:\Users\Desktop\LatLongTest_2.csv", sep=";", index=False)
使用我将展示的这种方法,您需要创建两个列表,一个包含纬度,另一个包含经度,然后作为列附加到您的 DataFrame。 提醒一下,它们的行数必须相同,否则会报错。
import pandas as pd
df = pd.read_csv(r"C:\Users\Desktop\LatLongTest.csv")
add_to_df = {'Latitude': LatitudeList, 'Longitude': LongitudeList}
df = df.append(pd.DataFrame(add_to_df))
df
也可以这样做,每行加一个值:
import pandas as pd
df = pd.read_csv(r"C:\Users\Desktop\LatLongTest.csv")
df.loc[df.Adress == '54298 Boca Chica Blvd Brownsville, TX', "Latitude"] = Latitude
df.loc[df.Adress == '54298 Boca Chica Blvd Brownsville, TX', "Longitude"] = Longitude
df
您可以在 this link
查看更多资源