[PYTHON] Petite histoire: divisez l'alphabet en nombres arbitraires et sortie (résolu)

Aperçu

Lorsque je recherche et étudie diverses choses liées aux trames de données pandas, je rencontre parfois une situation où je dois stocker des données appropriées au nom de la création d'une trame de données pour le moment. Je pourrais faire autant d'entiers que possible, mais je ne pouvais pas penser à des alphabets, et j'y ai travaillé tout le temps.

Cela ne prend pas beaucoup de temps car ce n'est pas un grand nombre, mais même si j'essaie d'automatiser des tâches simples, j'avais envie de faire des tâches simples en cours d'étude.

À la suite d'un peu de recherche, j'ai pu le résoudre avec la chaîne de la bibliothèque standard, je vais donc l'afficher dans le but de promouvoir la mémoire et de ne pas sécher le pinceau.

module de chaîne

Selon ce site, de nombreuses fonctions qui étaient autrefois implémentées dans string ont été migrées vers des objets str et unicode en tant que méthodes. Je pensais qu'il était raisonnable de ne pas l'avoir vu autant.

Le module> string commence par une première version de Python. Dans la version 2.0, de nombreuses fonctions qui n'étaient implémentées que dans ce module ont été migrées vers les méthodes d'objet str et unicode.

Cette fois, nous utiliserons la constante ascii_lowercase fournie dans ce module de chaîne.

string.ascii_lowercase Une minuscule contenant un alphabet inférieur. Super simple. Pour l'utiliser, vous devez importer la chaîne à l'avance.

python


import string

print(string.ascii_lowercase)
print(type(string.ascii_lowercase)

production


abcdefghijklmnopqrstuvwxyz
<class 'str'>

Puisqu'il s'agit d'une chaîne de caractères, il prend également en charge la notation utilisant des index.

python


print(string.ascii_lowercase[2])
print(string.ascii_lowercase[8:11])
print(string.ascii_lowercase[::-1])

production


c
ijk
zyxwvutsrqponmlkjihgfedcba

Cette fois, je vais l'utiliser pour créer une trame de données appropriée.

Création de trame de données

Après avoir pratiqué, j'ai créé une fonction pour que les alphabets puissent être attribués arbitrairement en fonction de l'index_list et de la columns_list. Je ne suis pas doué pour tourner des chiffres comme celui-ci, c'est donc une fonction assez compliquée.

python


import pandas as pd
import string
from tabulate import tabulate

def make_variable_alphabet_dataframe(index_size, columns_size):
    index_list = [f"index{i}" for i in range(1, index_size+1)]
    columns_list = [f"column{i}" for i in range(1, columns_size+1)]
    alphabet_list = [list(string.ascii_lowercase[i-(columns_size-1):i+1]) for i in range(columns_size-1, index_size*columns_size, columns_size)]
    df = pd.DataFrame(alphabet_list, index=index_list, columns=columns_list)
    
    return df


df1 = make_variable_alphabet_dataframe(3, 4)
print(tabulate(df1, df1.columns, tablefmt='github', showindex=True))

production


|        | column1   | column2   | column3   | column4   |
|--------|-----------|-----------|-----------|-----------|
| index1 | a         | b         | c         | d         |
| index2 | e         | f         | g         | h         |
| index3 | i         | j         | k         | l         |

Lorsque la taille est supérieure à 26, Aucun semble être stocké.

python


df2 = make_variable_alphabet_dataframe(6, 6)
print(tabulate(df2, df2.columns, tablefmt='github', showindex=True))

production


|        | column1   | column2   | column3   | column4   | column5   | column6   |
|--------|-----------|-----------|-----------|-----------|-----------|-----------|
| index1 | a         | b         | c         | d         | e         | f         |
| index2 | g         | h         | i         | j         | k         | l         |
| index3 | m         | n         | o         | p         | q         | r         |
| index4 | s         | t         | u         | v         | w         | x         |
| index5 | y         | z         |           |           |           |           |
| index6 |           |           |           |           |           |           |

Pour être honnête, je ne sais pas **. Lorsque j'ai déplacé l'exemple pour écrire "Bien sûr, je lance une erreur dans l'alphabet", cela a fonctionné. Cela peut être la rumeur "pour une raison quelconque, cela fonctionne". Est-ce par liste ou par spécification de DataFrame lui-même? J'ai essayé de le trouver, mais je ne comprends pas après tout. Je m'inquiète du sulme pris dans mes dents de derrière, alors j'apprécierais que vous m'apprendriez.

Post-scriptum (04/10/2020)

Des informations ont été fournies dans les commentaires. Il semble que None soit automatiquement stocké dans la trame de données tant que le nombre d'éléments jusqu'à la première ligne est suffisant. Donc, pour être précis, je pense que "** Si vous définissez la colonne de sorte que la première ligne tienne dans 26 colonnes, aucune erreur ne sera générée **". Puisque vous avez publié un exemple de programme, veuillez vous y référer pour plus de détails.

c'est tout. Merci pour votre visite. La prochaine fois, je parlerai de gspread_formatting, dont je pense qu'il y a peu d'informations sur le net, y compris Qiita pour une raison quelconque.

Recommended Posts

Petite histoire: divisez l'alphabet en nombres arbitraires et sortie (résolu)
Divisez l'ensemble de données (ndarray) en proportions arbitraires avec NumPy
L'histoire de Python et l'histoire de NaN
[Python] Changer l'alphabet en nombre