Python pandas: как указать типы данных при чтении файла Excel?
Я импортирую файл excel в фреймворк pandas с помощью функции pandas.read_excel()
.
Одним из столбцов является первичный ключ таблицы: все его номера, но он хранится как текст (маленький зеленый треугольник в левом верхнем углу клеток Excel подтверждает это).
Однако, когда я импортирую файл в фреймворк pandas, столбец импортируется как float. Это означает, что, например, '0614' становится 614.
Есть ли способ указать тип данных при импорте столбца? Я понимаю, что это возможно при импорте CSV файлов, но не может найти ничего в синтаксисе read_excel()
.
Единственное решение, о котором я могу думать, это добавить произвольную букву в начале текста (преобразование "0614" в "A0614" ) в Excel, чтобы убедиться, что столбец импортирован как текст, а затем отрубает "A" в python, поэтому я могу сопоставить его с другими таблицами, которые я импортирую из SQL.
Ответы
Ответ 1
Вы просто указываете преобразователи. Я создал таблицу Excel следующей структуры:
names ages
bob 05
tom 4
suzy 3
Если столбец "age" форматируется как строки. Загрузить:
import pandas as pd
df = pd.read_excel('Book1.xlsx',sheetname='Sheet1',header=0,converters={'names':str,'ages':str})
>>> df
names ages
0 bob 05
1 tom 4
2 suzy 3
Ответ 2
Начиная с v0.20.0
, аргумент ключевого слова dtype
в read_excel()
можно использовать для указания типов данных, которые необходимо применяется к столбцам, как это существует для read_csv()
case.
Использование аргументов converters
и dtype
вместе при одном и том же имени столбца приведет к тому, что последний будет затенен, а прежний получит предпочтение.
1) Для того чтобы он не интерпретировал dtypes
, а скорее передавал все содержимое столбцов, поскольку они были первоначально в файле раньше, мы могли бы установить этот аргумент str
или object
, чтобы мы не Не испортить наши данные. (одним из таких случаев были бы ведущие нули в числах, которые в противном случае терялись бы)
pd.read_excel('file_name.xlsx', dtype=str) # (or) dtype=object
2) Он даже поддерживает отображение битов, в котором keys
составляют имена столбцов и values
соответствующий ему тип данных, особенно если вы хотите изменить dtype
для подмножества всех столбцов.
# Assuming data types for `a` and `b` columns to be altered
pd.read_excel('file_name.xlsx', dtype={'a': np.float64, 'b': np.int32})
Ответ 3
Функция read_excel() имеет аргумент преобразователей, в котором вы можете применять функции для ввода в определенных столбцах. Вы можете использовать это, чтобы сохранить их как строки.
Документация:
Dict функций для преобразования значений в определенные столбцы. Ключи могут быть целыми или столбцами, значения - это функции, которые принимают один входной аргумент, содержимое ячейки Excel и возвращают преобразованное содержимое.
Пример кода:
pandas.read_excel(my_file, converters = {my_str_column: str})
Ответ 4
Если вам неизвестно количество и имя столбцов в dataframe, то этот метод может быть полезен:
column_list = []
df_column = pd.read_excel(file_name, 'Sheet1').columns
for i in df_column:
column_list.append(i)
converter = {col: str for col in column_list}
df_actual = pd.read_excel(file_name, converters=converter)
где column_list - это список имен ваших столбцов.
Ответ 5
Если ваш ключ имеет фиксированное количество цифр, вы, вероятно, должны хранить как текст, а не как числовые данные. Для этого вы можете использовать аргумент converters
или read_excel
.
Или, если это не сработает, просто манипулируйте своими данными после его чтения в ваш фреймворк данных:
df['key_zfill'] = df['key'].astype(str).str.zfill(4)
names key key_zfill
0 abc 5 0005
1 def 4962 4962
2 ghi 300 0300
3 jkl 14 0014
4 mno 20 0020
Ответ 6
Если вы не знаете имен столбцов и хотите указать str тип данных для всех столбцов:
table = pd.read_excel("path_to_filename")
cols = table.columns
conv = dict(zip(cols ,[str] * len(cols)))
table = pd.read_excel("path_to_filename", converters=conv)