Python, имеющий проблемы с большими числами, используемыми в качестве идентификаторов

Я составляю сценарий для анализа кампаний и составления отчетов. Я строю это на python, чтобы облегчить это в следующий раз. Я сталкиваюсь с проблемами с идентификаторами, связанными с моими данными, они по сути очень большие числа (без строк, без символов). при извлечении данных из Excel я получаю такие числа с плавающей запятой (7.000000e+16), когда на самом деле это целое число, подобное этому (70000000001034570). Моя проблема в том, что я теряю кучу данных, и все виды уникальных идентификаторов конвертируются в пару различных типов. Я понимаю, что это может быть проблема с функцией read_csv, которую я использую для извлечения, поскольку все это происходит из.csv. Я не уверен, что делать, поскольку преобразование в строку дает мне те же результаты, что и float, только как строковый тип данных, а преобразование в int дает мне буквальные результаты научной нотации (то есть 70000000000000000). Есть ли тип данных, который я могу сохранить как или метод, который я могу использовать для сохранения данных? Позже мне придется объединить идентификаторы с данными, извлеченными из запроса, поэтому в идеале я хотел бы найти тип данных, который может их сохранить. Несколько приведенных ниже строк кода выполняются, но возвращают несколько строк из-за описанной мной проблемы.

`high_lvl_df = pd.read_csv(r"mycsv.csv")
 full_df = low_lvl_df.merge(right=high_lvl_df, on='fact', how='outer')
 full_df.to_csv(r'fullmycsv.csv')`

0 ответов

Возможно, это связано с отсутствующими значениями.

Рассмотрим этот CSV:

70000000001034570,2.                                                               
70000000001034571,3.

Потом:

>>> pandas.read_csv('asdf.csv', header=None)     
                   0    1
0  70000000001034570  2.0
1  70000000001034571  3.0

Дает ожидаемый результат.

Hoever с:

70000000001034570,2.
,1.                                                                                
70000000001034571,3.

Вы получаете:

>>> pandas.read_csv('asdf.csv', header=None)
              0    1
0  7.000000e+16  2.0
1           NaN  2.0
2  7.000000e+16  3.0

Это потому, что целые числа не имеют NaNvalues, тогда как float действительно имеют это значение. Таким образом, Pandas предполагает, что тип столбца является плавающим, а не целым.

Вы можете использовать pandas.read_csv()с dtype параметр для принудительного ввода строки типа, например:

pandas.read_csv('asdf.csv', header=None, dtype={0: str})                  
                   0    1
0  70000000001034570  2.0
1                NaN  2.0
2  70000000001034571  3.0

Согласно документации Pandas:

dtype: введите имя или словарь столбца -> тип, необязательно

Тип данных для данных или столбцов. Например, {'a': np.float64, 'b': np.int32, 'c': 'Int64'} Используйте str или object вместе с подходящими настройками na_values ​​для сохранения, а не интерпретации dtype. Если указаны преобразователи, они будут применяться ВМЕСТО преобразования dtype.

Другие вопросы по тегам