#python #pandas #dataframe #merge
#python #панды #фрейм данных #слияние #pandas
Вопрос:
У меня есть два фрейма данных, которые выглядят следующим образом:
# 1
Approved symbol RefSeq IDs Ensembl gene ID
A1BG NM_130786 ENSG00000121410
A1BG-AS1 NR_015380 ENSG00000268895
A1CF NM_014576 ENSG00000148584
A1S9T
A2M NM_000014 ENSG00000175899
A2M-AS1 NR_026971 ENSG00000245105
#2
Approved symbol RefSeq IDs Ensembl gene transcript ID
DDX11L1 NR_046018 ENST00000456328
DDX11L1 ENST00000456328
DDX11L1 ENST00000518655
OR4F5 NM_001005484 ENST00000335137
DQ597235 n/a
DQ599768 n/a
Это не весь фрейм данных целиком, а только головной.
То, что я хотел сделать, это объединить оба файла в соответствии с первым столбцом, поэтому я выполнил следующие команды:
df1 = pd.read_csv('human_conversion_by_gene_symbol', sep='t')
df2 = pd.read_csv('human_conversion_transcript', sep='t')
df3 = df1.merge(df2, on=['Approved symbol'])
df3.to_csv('merged_human_conversion', sep='t')
Проблема начинается сейчас, я, кажется, не нахожу некоторые значения, которые я нахожу в исходных фреймах данных.
Например, я ищу MIR4430
(который принадлежит первому столбцу), и я могу найти его в df1
, но не в объединенном фрейме данных.
Не предполагается, что слияние приведет к объединению элементов внутри указанного мной столбца?
Ответ №1:
Вы можете определить тип слияния, используя how
аргумент, переданный в pd.merge
(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas .DataFrame.merge.html). Это inner
по умолчанию. Если вы хотите объединение, установите how = 'outer'
.
Ответ №2:
merge
команда по умолчанию использует inner
слияние (включает только элементы, которые существуют в обоих фреймах данных).
вам нужно было бы использовать outer
слияние, чтобы выполнить объединение
df3 = df1.merge(df2, on=['Approved symbol'], how='outer')
обратитесь к документам DataFrame.merge