python-3.x - 如何使用它们的 ID 映射 python 中两个 CSV 文件的值?
问题描述
我正在尝试将两个 CSV 文件之间的数据映射到一个输出结果或一个新的输出文件中。第一个文件包含机场代码列表及其对应的纬度和经度。第二个文件包含乘客的详细信息,包括他们的出发和目的地机场代码。
第一个 CSV 文件示例:
A_code Latitude Longitude
ATL 33.636719 -84.428067
PEK 40.080111 116.584556
LHR 51.4775 -0.461389
第二个 CSV 文件示例:
P_id f_id from dest
usr1 1 ATL PEK
usr1 2 PEK LHR
usr2 1 ATL PEK
usr3 3 LHR ATL
usr2 3 LHR ATL
到目前为止我所做的是:
import csv
import pandas as pd
colnames = ['Pass_id', 'f_id', 'from', 'dest']
L1 = pd.read_csv(r"Passenger_data.csv",names=colnames)
colnames = ['f_id', 'from_lat', 'from_lon']
L2 = pd.read_csv(r"airports_data.csv",names=colnames)
result = pd.merge(L1, L2, how='left',on='from')
colnames = ['Pass_id', 'f_id', 'from', 'dest']
L1 = pd.read_csv(r"Passenger_data.csv",names=colnames)
colnames = ['f_id', 'dest_lat', 'dest_lon']
L2 = pd.read_csv(r"airports_data.csv",names=colnames)
result2 = pd.merge(L1, L2, how='left',on='dest')
然后我结合了result+result2的结果。
final= result['Pass_id']+' '+result['f_id']+' '+result['from_lat'].apply(str)+' '+result['from_lon'].apply(str)+' '+result2['dest_lat'].apply(str)+' '+result2['dest_lon'].apply(str)
我已经取得了我正在寻找的结果,但这是一个漫长且不切实际的过程。我相信有一种更快的方法可以做到这一点。组合(映射)后的预期结果应该是这样的
P_id f_id from dest from_lat from_lon dest_lat dest_lon
usr1 1 ATL PEK 33.636719 -84.428067 40.080111 116.584556
usr1 2 PEK LHR 40.080111 116.584556 51.4775 -0.461389
usr2 1 ATL PEK 33.636719 -84.428067 40.080111 116.584556
usr3 3 LHR ATL 51.4775 -0.461389 33.636719 -84.428067
usr2 3 LHR ATL 51.4775 -0.461389 33.636719 -84.428067
任何建议将不胜感激。非常感谢
解决方案
df = pd.read_csv('airports_data.csv')
df1 = pd.read_csv('Passenger_data.csv')
df = df.set_index('A_code')
df1['from_lat'] = df1['from'].map(df['Latitude'])
df1['from_lon'] = df1['from'].map(df['Longitude'])
df1['dest_lat'] = df1['dest'].map(df['Latitude'])
df1['dest_lon'] = df1['dest'].map(df['Longitude'])
输出将是
P_id f_id from dest from_lat from_lon dest_lat dest_lon
0 usr1 1 ATL PEK 33.636719 -84.428067 40.080111 116.584556
1 usr1 2 PEK LHR 40.080111 116.584556 51.477500 -0.461389
2 usr2 1 ATL PEK 33.636719 -84.428067 40.080111 116.584556
3 usr3 3 LHR ATL 51.477500 -0.461389 33.636719 -84.428067
4 usr2 3 LHR ATL 51.477500 -0.461389 33.636719 -84.428067
推荐阅读
- json - 如何在本地使用 reactNative 获取 name.json 文件?
- javascript - 如何使用敲除禁用/启用 html 表中的所有元素
- c++ - 为什么我的程序有时只能正确识别数组中的最高值和最低值?
- sql - SQL根据引用表递归选择父子
- bash - In the "rbenv-rehash" bash script, what does "-e* | -- ) break ;;" do?
- python - 如何使用 lxml 选择和更新混合内容中的文本节点?
- android - 如何为小部件重新启动 RemoteViewsService
- angular - 如何从打字稿中的日期类型中获取年月日
- scala - 在 Spark Scala 的数据框列中爆炸元组数组
- c# - C# Winforms 连接到 MySQL AWS 数据库