如何读取 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中添加新列并从数组中填充它?