Объединение нескольких pandas фреймов данных с помощью общих строк в столбце - PullRequest
2 голосов
/ 06 января 2020

У меня есть 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 строками !! У меня только 4825 строк в каждом CSV-файле.

, даже если использовать:

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

, получается кадр данных с 5295 строками.

Я знаю, что все предложения в файлах csv идентичны, потому что я загрузил в mTurk один и тот же файл предложений csv для пометки.

Ответы [ 2 ]

0 голосов
/ 06 января 2020

У вас могут быть строки с разными значениями. Обязательно предварительно обработайте их, выполнив опускание и раздевание. Пример:

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()

Результат:

enter image description here

0 голосов
/ 06 января 2020

похоже, ваш код работает правильно. Я предполагаю, что проблема в том, что ваши предложения не отличаются. если у вас есть повторяющиеся предложения, выполнение внутреннего объединения умножит их. google "декартово произведение"
можете ли вы опубликовать, сколько повторяющихся предложений в каждом файле?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...