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
Это потому, что целые числа не имеют NaN
values, тогда как 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.