1
votes

Itération de ligne Python DataFrame

Fake Data:

entrez la description de l'image ici

Comment écrire les colonnes suivantes en python?

UpperCaseWords: somme des mots majuscules de chaque ligne

% de mots majuscules: pourcentage de texte en majuscules


3 commentaires

Est-ce que cela répond à votre question? Comment parcourir les lignes d'un DataFrame dans Pandas


Vous voulez donc savoir comment calculer ces valeurs?


Veuillez ne pas publier d'images de code / d'erreurs / de données. Publiez plutôt le code / les erreurs / les données sous forme de texte dans un bloc de code. Voir Comment poser une bonne question?


3 Réponses :


0
votes

Utilisez .str.split () pour diviser les mots d'une phrase dans une liste, puis utilisez .str.isupper () pour compter les mots qui sont complètement en majuscules:

                           split                   count_upper  perc
0   how are you DOING OR  [how, are, you, DOING, Or]    1   5   20.
1   WE want NOW ansWers   [WE, want, NOW, ansWers]      2   4   50.

Trame de données résultante:

# example data
df = pd.DataFrame(
    {'A': ['how are you DOING Or', 'WE want NOW ansWers']}
)

# split your string, default split is on a space
# you get a list words
df['split_words'] = df['A'].str.split()

# iterate over list of words and count how many are uppercase
df['count_upper_case_words'] = df['split_words'].apply(
    lambda list_: sum(1 for word in list_ if word.isupper())
)

# count total number of words
df['count_total_words'] = df['split_words'].str.len()

# calculate percentage of uppercase words
df['perc_uper_case'] = df['count_upper_case_words'] / df['count_total_words'] * 100.


0 commentaires

0
votes

Vous pouvez utiliser .str.count() pour compter séparément les occurrences de majuscules et le nombre total de mots. De là, vous pouvez utiliser la division pour calculer le pourcentage de mots en majuscules.

df["n_uppercase_words"] = df["A"].str.count(r"\b[A-Z]+\b")
df["n_words"] = df["A"].str.count(r"\b\w+\b")
df["percent_uppercase_words"] = df["n_uppercase_words"] / df["n_words"] * 100

print(df)
                                    A  n_uppercase_words  n_words  percent_uppercase_words
0                    My name is JACOB                  1        4                     25.0
1  Football and BASKETBALL and SOCCER                  2        5                     40.0
2                        North Dakota                  0        2                      0.0
3                        South Dakota                  0        2                      0.0

Expressions régulières:

  • \b[AZ]+\b : capture une ou plusieurs lettres majuscules consécutives qui ont une forme de séparation de chaque côté
  • \b[A-Za-z]+\b : Identique à ci-dessus, mais inclut également des lettres minuscules.

Cette solution ignorera les nombres ou les "mots" contenant des nombres (ou tout autre caractère qui n'est pas une lettre az).


0 commentaires

0
votes

très facile à comprendre

    A      uppercase    percentage
0   ABC       1         100.0
1   abc BCD   1         50.0

PRODUCTION:

import pandas as pd
data = {'A':['ABC', 'abc BCD']} 
df = pd.DataFrame(data) #feed data to create DataFrame
def count(row):
    return sum(word.isupper() for word in row.split()) #split given sentence and check each word if uppercase or not
def percentage(row):
    return (int(row['uppercase']) / len(row['A'].split())) * 100. #count the number of words and uppercase word to calculate percentage
df['uppercase'] = df['A'].apply(lambda row: count(row))
df['percentage'] = df.apply(lambda row: percentage(row), axis=1)
df #final data frame


2 commentaires

Salut @ ssp4all, la question compte le pourcentage de mots en majuscules, donc votre code doit être ajusté


@ sander-van-den-oord merci pour le commentaire. J'ai mis à jour ma réponse!