J'importe un fichier Excel dans une base de données de pandas avec la fonction pandas.read_Excel()
.
Une des colonnes est la clé primaire du tableau: ce sont tous des nombres, mais ils sont stockés sous forme de texte (le petit triangle vert en haut à gauche des cellules Excel le confirme).
Cependant, lorsque j'importe le fichier dans un cadre de données pandas, la colonne est importée sous forme de fichier flottant. Cela signifie que, par exemple, «0614» devient 614.
Est-il possible de spécifier le type de données lors de l'importation d'une colonne? Je comprends que cela est possible lors de l'importation de fichiers CSV, mais je n'ai rien trouvé dans la syntaxe de read_Excel()
.
La seule solution à laquelle je peux penser est d'ajouter une lettre arbitraire au début du texte (en convertissant "0614" en "A0614") dans Excel pour vous assurer que la colonne est importée en tant que texte, puis en coupant le "A" en python, je peux donc le faire correspondre à d'autres tables que j'importe de SQL.
Vous venez de spécifier des convertisseurs. J'ai créé une feuille de calcul Excel de la structure suivante:
names ages
bob 05
tom 4
suzy 3
Où la colonne "âges" est mise en forme en tant que chaînes. Charger:
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
À partir de v0.20.0
, le mot clé dtype
dans read_Excel()
function peut être utilisé pour spécifier les types de données à appliquer aux colonnes, tout comme il existe pour read_csv()
cas.
Utiliser les arguments converters
et dtype
ensemble sur le même nom de colonne ferait en sorte que le dernier soit occulté et que le premier acquière une préférence.
1) Afin de ne pas interpréter le dtypes
mais de transmettre tout le contenu de ses colonnes tels qu’ils étaient à l’origine dans le fichier, nous pourrions définir cet argument sur str
ou object
afin de ne pas altérer nos données. (Un cas de ce genre serait des zéros non significatifs qui seraient perdus autrement)
pd.read_Excel('file_name.xlsx', dtype=str) # (or) dtype=object
2) Il prend même en charge un mappage dict dans lequel keys
constituent les noms de colonne et values
son type de données respectif à définir, en particulier si vous souhaitez modifier le dtype
pour un sous-ensemble de toutes les colonnes.
# Assuming data types for `a` and `b` columns to be altered
pd.read_Excel('file_name.xlsx', dtype={'a': np.float64, 'b': np.int32})
La fonction read_Excel () a un argument convertisseurs, dans lequel vous pouvez appliquer des fonctions à saisir dans certaines colonnes. Vous pouvez l'utiliser pour les conserver sous forme de chaînes . Documentation :
Dict de fonctions pour la conversion de valeurs dans certaines colonnes. Les clés peuvent être des entiers ou des étiquettes de colonne. Les valeurs sont des fonctions qui prennent un argument d'entrée, le contenu de la cellule Excel, et renvoient le contenu transformé.
Exemple de code:
pandas.read_Excel(my_file, converters = {my_str_column: str})
Si vous ne connaissez pas le nombre et le nom des colonnes dans le cadre de données, cette méthode peut être pratique:
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)
où liste_colonne est la liste de vos noms de colonne.
Si votre clé a un nombre fixe de chiffres, vous devriez probablement stocker sous forme de texte plutôt que sous forme de données numériques. Vous pouvez utiliser l'argument converters
ou read_Excel
pour cela.
Ou, si cela ne fonctionne pas, manipulez simplement vos données une fois qu'elles ont été lues dans votre cadre de données:
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