Поиск данных между excel и csv файлом python - как vlookup [duplicate]

Видя, что мой комментарий выше действительно помог кому-то решить проблему, я отправлю ее в качестве ответа.

Проблема возникает, если вы переключитесь с %matplotlib inline на %matplotlib notebook без перезапуска ядра.

Переключение с %matplotlib notebook на %matplotlib inline работает нормально.

Итак, решение состоит в том, чтобы либо перезапустить ядро, либо запустить новый ноутбук.

Кажется, что в некоторых случаях это помогает повторить настройку backend ноутбука, то есть вызвать его дважды например

%matplotlib notebook
%matplotlib notebook
2
задан Friedrich Franz 11 May 2017 в 07:49
поделиться

1 ответ

Thyere - проблема в том, что ваш столбец id в одном df есть object (очевидно string) и другой int, поэтому нет соответствия и получить NaN.

Если имеют одинаковые dtypes :

print (df1['id'].dtypes)
int64
print (df2['id'].dtypes)
int64

merged = pd.merge(df1, df2, how="left", on="id")
print (merged)
   Date  id  Market_Cap      Ticker
0  2000   1         400       Shell
1  2000   2         200  ExxonMobil
2  2001   1         410       Shell
3  2001   2         220  ExxonMobil

Другим решением, если нужно добавить только один новый столбец, является map :

df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])
print (df1)
   Date  id  Market_Cap      Ticker
0  2000   1         400       Shell
1  2000   2         200  ExxonMobil
2  2001   1         410       Shell
3  2001   2         220  ExxonMobil

Имитация вашей проблемы:

print (df1['id'].dtypes)
object
print (df2['id'].dtypes)
int64

df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])
print (df1)
   Date id  Market_Cap Ticker
0  2000  1         400    NaN
1  2000  2         200    NaN
2  2001  1         410    NaN
3  2001  2         220    NaN

И решение преобразуется в int в astype (или в столбце id в df2 до str):

df1['id'] = df1['id'].astype(int)
#alternatively
#df2['id'] = df2['id'].astype(str)
df1['Ticker'] = df1['id'].map(df2.set_index('id')['Ticker'])
print (df1)
   Date  id  Market_Cap      Ticker
0  2000   1         400       Shell
1  2000   2         200  ExxonMobil
2  2001   1         410       Shell
3  2001   2         220  ExxonMobil
4
ответ дан jezrael 19 August 2018 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: