获取两个不同dataframe python中的匹配行
提前感谢-问题是比较csv文件的两个独立数据帧的行;有或没有列标题。 我想将第二个数据帧中的行与第一个数据帧中的行进行匹配。我不能使用merge,因为两者都没有可合并的公共列名 1:第一个数据帧有标题 2:第二个数据帧没有标题 3:获得比赛的位置 我试过这个:获取两个不同dataframe python中的匹配行,python,python-3.x,pandas,csv,dataframe,Python,Python 3.x,Pandas,Csv,Dataframe,提前感谢-问题是比较csv文件的两个独立数据帧的行;有或没有列标题。 我想将第二个数据帧中的行与第一个数据帧中的行进行匹配。我不能使用merge,因为两者都没有可合并的公共列名 1:第一个数据帧有标题 2:第二个数据帧没有标题 3:获得比赛的位置 我试过这个: df1 = pd.read_csv(data1) df2 = pd.read_csv(data2) def test1(): for index, rows in df1.iterrows():
df1 = pd.read_csv(data1)
df2 = pd.read_csv(data2)
def test1():
for index, rows in df1.iterrows():
if rows in (df2):
return nrows
数据集:
第一个数据集:第二个数据集:
首先使用以下命令将标题添加到第二个
数据帧中:
df2.columns = df1.columns
或者,更好的做法是,在读取文件时首先使用以下命令定义它们:
df2 = pd.read_csv(data2, header=None, names=df1.columns.tolist())
然后internal merge
将它们合并,只保留在两个文件中相同的行中:
united_df = df1.merge(df2, how='inner')
不要使用iterrows()
,itertuples()
要好得多。您可以共享数据帧或文件的实际内容吗?参见:NH23345 mountain2B 936 56.870342-4.199001 NH136714 A'Chailleach 997 57.6938-5.128715 NH681041 A'Chailleach 929.2 57.109564-4.179285 NH094147 A'Chraileag(A'Chralaig)1120 57.184186-5.154837 NH008231 A’Ghlas bheinn 918 57.25509-5.303687 NH007749 A’Mhaighdean 967 57.719644-5.34672 NN604762 AA 973.2 56.857002-4.290668地名高度经度Osgrid A’Bhuidheanach Bheeag 936 56.870342-4.199001 NN660775 A’Chailleach 997 57.6938-5.128715 NH136714 A’Chailleach 929.2 57.109564-1042851一个“Chraileag”(一个“Chralaig”)1120 57.184186-5.154837 NH094147 A'Ghlas bheinn 918 57.25509-5.303687 NH008231 A'Mhaighdean 967 57.719644-5.34672 NH007749 A'mharconich 973.2 56.857002-4.290668 NN604762 Am Basteir 934 57.247931-6.202982 NG465253 Am Bodach 1031.8 56.741727-4.983393 NN Am Faochagach 953 57.771801-4.85387999是第一个数据集没有列名,而第二个是具有列名的数据集。这些文件存储在单独的csv文件中,最好将其包含在您的帖子中,呃。谢谢您的贡献@Aryerez。在数据集和合并不相同的情况下,将df1列分配给df2意味着没有正确的列headings@happycoder如果数据集不相同,整个问题就毫无意义。如果它们的意思不一样,你到底想和什么匹配?抱歉@Aryere,目的是逐行阅读df1;如果任何行与df2中的行匹配,则将其标记为。Ok,但如果df2
中的列不一定与df1
中的列具有相同的含义,则该行不匹配。例如,假设df2
中的第3列表示“长度”,而df2
中的第4列表示“纬度”(与df1
中的含义相反)。如果df1
中一行的经度与df2
中的纬度(而不是经度)匹配,您如何确定它们是否匹配?