Python 合并两个csv文件(如果匹配列),然后连接额外的列
我正在寻找熊猫方面的帮助。我试图比较“email”列是否匹配,然后将额外的列连接到单独的csv中 我有以下资料: file1.csvPython 合并两个csv文件(如果匹配列),然后连接额外的列,python,python-3.x,pandas,csv,Python,Python 3.x,Pandas,Csv,我正在寻找熊猫方面的帮助。我试图比较“email”列是否匹配,然后将额外的列连接到单独的csv中 我有以下资料: file1.csv email, user_id example1@gmail.com, 1 example2@gmail.com, 24 example3@gmail.com, 12 example5@gmail.com, 31 文件2.csv email, group_id example1@gmail.com, g1 example2@gmail.com, g1 exampl
email, user_id
example1@gmail.com, 1
example2@gmail.com, 24
example3@gmail.com, 12
example5@gmail.com, 31
文件2.csv
email, group_id
example1@gmail.com, g1
example2@gmail.com, g1
example3@gmail.com, g2
example4@gmail.com, g3
output.csv:
email, user_id, group_id
example1@gmail.com, 1, g1
example2@gmail.com, 24, g1
example3@gmail.com, 12, g2
我感谢您提供的任何帮助。谢谢。是的,这就像进行合并一样简单:
output = pd.merge(left=file1, right=file2, on='email', how='inner')
将“how”设置为“internal”可确保仅保留两个文件中的匹配项是的,这与进行合并一样简单:
output = pd.merge(left=file1, right=file2, on='email', how='inner')
将“how”设置为“internal”可确保仅保留两个文件中的匹配项据我所知,您试图实现以下目标:
import pandas as pd
csv1 = pd.DataFrame({"email":["example1@gmail.com", "example2@gmail.com", "example3@gmail.com", "example5@gmail.com"],"user_id":[1,24,12,31]})
csv2 = pd.DataFrame({"email":["example1@gmail.com", "example2@gmail.com", "example3@gmail.com", "example4@gmail.com"],"group_id":["g1","g1","g2","g3"]})
csv3 = pd.DataFrame({"email":["example1@gmail.com", "example2@gmail.com", "example3@gmail.com"],"user_id":[1,24,12],"group_id":["g1","g1","g2"]})
list_with_dataframes = [csv2,csv3]
result = csv1
for dataframe in list_with_dataframes:
result = result.merge(dataframe, how = "outer")
print(result)
这就产生了一个输出:
email user_id group_id
0 example1@gmail.com 1.0 g1
1 example2@gmail.com 24.0 g1
2 example3@gmail.com 12.0 g2
3 example5@gmail.com 31.0 NaN
4 example4@gmail.com NaN g3
email user_id group_id
0 example1@gmail.com 1 g1
1 example2@gmail.com 24 g1
2 example3@gmail.com 12 g2
我希望这就是你要找的。所有匹配的数据都将保留,所有缺失的数据都将使用NaN进行更改。如果只希望保留完全匹配的数据,只需将此行中的“外部”替换为“内部”:
result = result.merge(dataframe, how = "inner")
它给出了一个输出:
email user_id group_id
0 example1@gmail.com 1.0 g1
1 example2@gmail.com 24.0 g1
2 example3@gmail.com 12.0 g2
3 example5@gmail.com 31.0 NaN
4 example4@gmail.com NaN g3
email user_id group_id
0 example1@gmail.com 1 g1
1 example2@gmail.com 24 g1
2 example3@gmail.com 12 g2
据我所知,你当时正试图实现这样的目标:
import pandas as pd
csv1 = pd.DataFrame({"email":["example1@gmail.com", "example2@gmail.com", "example3@gmail.com", "example5@gmail.com"],"user_id":[1,24,12,31]})
csv2 = pd.DataFrame({"email":["example1@gmail.com", "example2@gmail.com", "example3@gmail.com", "example4@gmail.com"],"group_id":["g1","g1","g2","g3"]})
csv3 = pd.DataFrame({"email":["example1@gmail.com", "example2@gmail.com", "example3@gmail.com"],"user_id":[1,24,12],"group_id":["g1","g1","g2"]})
list_with_dataframes = [csv2,csv3]
result = csv1
for dataframe in list_with_dataframes:
result = result.merge(dataframe, how = "outer")
print(result)
这就产生了一个输出:
email user_id group_id
0 example1@gmail.com 1.0 g1
1 example2@gmail.com 24.0 g1
2 example3@gmail.com 12.0 g2
3 example5@gmail.com 31.0 NaN
4 example4@gmail.com NaN g3
email user_id group_id
0 example1@gmail.com 1 g1
1 example2@gmail.com 24 g1
2 example3@gmail.com 12 g2
我希望这就是你要找的。所有匹配的数据都将保留,所有缺失的数据都将使用NaN进行更改。如果只希望保留完全匹配的数据,只需将此行中的“外部”替换为“内部”:
result = result.merge(dataframe, how = "inner")
它给出了一个输出:
email user_id group_id
0 example1@gmail.com 1.0 g1
1 example2@gmail.com 24.0 g1
2 example3@gmail.com 12.0 g2
3 example5@gmail.com 31.0 NaN
4 example4@gmail.com NaN g3
email user_id group_id
0 example1@gmail.com 1 g1
1 example2@gmail.com 24 g1
2 example3@gmail.com 12 g2
尝试合并
import pandas as pd
f1 = pd.read_csv('f1.csv')
f2 = pd.read_csv('f2.csv')
out = pd.merge(f1,f2,on='email',how='inner')
print(out)
out.to_csv("final.csv", index=False)
输出是
email user_id group_id
0 example1@gmail.com 1 g1
1 example2@gmail.com 24 g1
2 example3@gmail.com 12 g2
尝试合并
import pandas as pd
f1 = pd.read_csv('f1.csv')
f2 = pd.read_csv('f2.csv')
out = pd.merge(f1,f2,on='email',how='inner')
print(out)
out.to_csv("final.csv", index=False)
输出是
email user_id group_id
0 example1@gmail.com 1 g1
1 example2@gmail.com 24 g1
2 example3@gmail.com 12 g2
这是怎么写的,它将file1.csv和file2.csv的文件位置作为一个数据框?@JeremyLin如果你想在某个文件夹中自动搜索csv文件,你可以这样做:path_to_files=[“path/to/csv2”,“path/to/csv3”]等,然后列出_with_dataframes=[pd.read_csv(file)for path_to_files],这也是可能的。如果你需要的话,我可以更新答案来说明这一点。这怎么能写成它将file1.csv和file2.csv的文件位置作为一个数据帧呢?@JeremyLin你可以这样做:path\u to_files=[“path/to/csv2”,“path/to/csv3”]等等,然后列出带有数据帧的\u=[pd.read\u csv(文件)作为path\u to_文件中的文件]如果您想在某个文件夹中自动搜索csv文件,也可以这样做。如果你需要的话,我可以更新答案。