如何读取 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

查看更多资源