如何读取 CSV、再添加两列并插入依赖于当前列的数据?

Posted

技术标签:

【中文标题】如何读取 CSV、再添加两列并插入依赖于当前列的数据?【英文标题】:How can I read a CSV, add two more columns, and insert data that is dependent on the current columns? 【发布时间】:2021-12-28 15:12:11 【问题描述】:

我有一个看起来像这样但更长的 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 中并不重要。我读过的以前的帖子要么侧重于附加整行而不是列,要么只是使用手动输入/硬编码到 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 那样直观,所以入门有点挑战。

【问题讨论】:

【参考方案1】:

您只需要添加列然后保存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)

【讨论】:

已接受答案。谢谢!以正确的方式创建“经度”和“纬度”列并使用 df.at[x,y] 分配值是缺失的部分。不幸的是,看起来我已经尽可能多地使用了这个免费的 API,所以我必须开始使用一个花钱的 API。 C'est la vie。【参考方案2】:

使用我将展示的这种方法,您需要创建两个列表,一个带有纬度,另一个带有经度,然后作为列附加到您的 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、再添加两列并插入依赖于当前列的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 csv 读取列并运行更新查询?

如何在具有数百条记录的现有csv中添加新列并从数组中填充它?

如何从字符串中提取文本并将其保存为两列并在第三列的末尾添加字符

Excel宏比较两个工作表中的两列并插入行值

从 CSV 导入列并替换逗号

求助,python如何在csv插入一列的问题