2 votes

impression du formatage de 2 colonnes pandas

  • Je peux imprimer 2 colonnes d'un pandas comme un cadre de données ce
  • Comment formater une impression ligne par ligne ?
  • Voici ma solution "moche" suivie de ce que je m'attendais à voir fonctionner

    import pandas

    def date_normalization(data: pandas.core.frame.DataFrame) -> None:

    EDIT: add completed code

    # convert to desired date format
    data[normalized] = pandas.to_datetime(
        data[original],
        errors="coerce",
    ).dt.strftime('%d/%m/%Y')

    original = "start" normalized = "normalized"

    data = pandas.DataFrame({ original: { 0: "AUG 26 2016", 1: "JAN-FEB 2021", 2: "2017-06-01 00:00:00" }})

    date_normalization(data)

    remove rows with invalid date

    data = data[data[normalized].notnull()]

    arrggghh ... this is working, but ugly ...

    for i, before in enumerate(data[original]): for j, after in enumerate(data[normalized]): if i == j: print(f"row {i}: {before} -> {after}")

    print("\n")

    surprisingly (?) this doesn't work

    for row in data: print(f"{row[original]} -> {row[normalized]}")

Voici l'erreur que j'obtiens au deuxième essai :

row 0: AUG 26 2016 -> 26/08/2016
row 1: 2017-06-01 00:00:00 -> 01/06/2017

Traceback (most recent call last):
  File "/home/oren/Downloads/GGG/main.py", line 36, in <module>
    print(f"{row[original]} -> {row[normalized]}")
TypeError: string indices must be integers

1voto

jezrael Points 290608

Parce qu'une nouvelle colonne a été créée normalized vous pouvez utiliser zip :

import pandas as pd

def date_normalization(data: pd.core.frame.DataFrame) -> None:
    # EDIT: add completed code
    # convert to desired date format
    data[normalized] = pd.to_datetime(
        data[original],
        errors="coerce",
    ).dt.strftime('%d/%m/%Y')
    return data.dropna(subset=['normalized'])

original = "start"
normalized = "normalized"

data = pd.DataFrame({
    original:
    {
        0: "AUG 26 2016",
        1: "JAN-FEB 2021",
        2: "2017-06-01 00:00:00"
    }})

data = date_normalization(data)
print (data)
                 start  normalized
0          AUG 26 2016  26/08/2016
2  2017-06-01 00:00:00  01/06/2017

for o,n in zip(data[original], data[normalized]):
    print(f"{o} -> {n}")
    AUG 26 2016 -> 26/08/2016
    2017-06-01 00:00:00 -> 01/06/2017

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X