Python ValueError при работе на другом ноутбуке - PullRequest
1 голос
/ 28 мая 2020

Я только что создал функцию, которая отлично работает на моем ноутбуке (Ma c, но я работаю на виртуальной машине Windows офисного ноутбука), но когда я передаю ее коллеге o 'У меня возникает ошибка ValueError:

"Вы пытаетесь объединить столбцы object и int64. Если вы хотите продолжить, sh вы должны использовать pd.concat"

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

df = pd.merge (df1, df2, on = "x", how = "outer)

Входные файлы точно такие же (взяты непосредственно из той же удаленной папки). Я совершенно не знаю, как исправить проблему, и я не понимаю, почему на моем ноутбуке это работает (даже если я открываю новый скрипт или Я перезапускаю ядро, поэтому нет сохраненных переменных), а в одном из моих коллег - нет.

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Один из столбцов является типом данных объекта, а другой - целым числом. Для объединения они должны быть одного формата. Попробуйте добавить две строки, чтобы изменить тип данных на компьютере вашего коллеги.

df2['x'] = df2['x'].astype(str)
df1['x'] = df1['x'].astype(str)
df = pd.merge(df1, df2, on = "x", how = "outer)

Поведение, вероятно, отличается из-за другой версии pandas; или, возможно, есть небольшие нюансы в файле excel, где в файле excel на компьютере вашего коллеги один из столбцов сохранен в другом формате.

0 голосов
/ 28 мая 2020
• 1000 у вас есть операции, зависящие от локали, которые могут привести к тому, что число с "неправильным" десятичным разделителем не будет распознано как число.

Этого не должно происходить в pd.read_csv(), потому что параметр decimal имеет хорошо- определено значение по умолчанию ".".

Но по опыту, который у меня был с метками времени в другом контексте, одна метка времени с "плохим" форматом может привести к тому, что весь столбец будет иметь неправильный тип. Итак, если только одно число только одного из двух файлов в столбце, который вы объединяете, имеет десятичный разделитель, и этот десятичный разделитель распознается как таковой только на вашем компьютере, только на вашем компьютере соединение будет успешным (I ' m предполагая, что pandas может присоединяться к числовым c столбцам, даже если они другого типа).

...