簡體   English   中英

通過列中的常見 STRINGS 合並多個 Pandas 數據框

[英]Merging multiple pandas dataframes by common STRINGS in a column

我有 6 個 csv 文件,其中一列是一個句子,第二列是一個整數。

所有 csv 文件中的句子都是相同的,但它們在文件之間的關鍵順序是亂序的。

我想按句子合並所有數據框,這樣我就有一列句子,然后每個 csv 文件中的每個整數列都與該句子相關聯。

我已經通過常見的“句子”列嘗試了各種合並和減少技術,但我最終得到的行數比我應有的多幾個數量級。

例如:

data_frames = [df1, df2, df3, df4, df5, df6]
reduce(lambda x,y: pd.merge(x,y, on='sentence', how='inner'), data_frames)

結果是一個包含 12,502,455 行的數據框!! 我在每個 csv 文件中只有 4,825 行。

甚至使用:

pd.merge(df1,df2, on='sentence', how='inner')

結果是一個有 5295 行的數據框。

我知道 csv 文件中的所有句子都是相同的,因為我將相同的 csv 句子文件上傳到 mTurk 以進行標記。

看起來您的代碼運行正常。 我猜問題是你的句子不明顯。 如果您有重復的句子,運行內部連接會使它們相乘。 谷歌“笛卡爾積”
你能貼出每個文件中有多少重復的句子嗎?

您可能有具有不同值的字符串。 確保在進行降低和剝離之前對它們進行預處理。 例子:

new_dfs = []
for df in dfs:
   df['sentence'] = df['sentence'].apply(lambda x: x.lower().strip())
   new_dfs.append(df)

然后,您可以按照您提到的簡單合並。 確保具有相似的命名列。

這是一個簡單的工作示例:

import pandas as pd

vals1 =  [[1, 'doc'], [2, 'bac'], [3, 'mec']]
vals2 =  [[22, 'doc'], [12, 'mec'], [67, 'bac']]
vals3 =  [[15, 'mec'], [35, 'bac'], [122, 'doc']]
df1 = pd.DataFrame(data=vals1, columns=["x","y"])
df2 = pd.DataFrame(data=vals2, columns=["x","y"])
df3 = pd.DataFrame(data=vals3, columns=["x","y"])
df4 = pd.merge(df1, df2, on='y', how='inner', suffixes=("1","2"))
df4 = pd.merge(df4, df3, on='y', how='inner')
df4.head()

結果:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM