0
votes

Python Panda CSV Management

HI Quertige rapide sur les pandas via Juypter Ipython. J'ai écrit le code ci-dessous et j'ai travaillé à travers des autres bits d'automatisation que j'essaye de faire pour une entreprise d'amis. Si je voulais diviser la première colonne en 2 en utilisant "-" comme délimiteur comme vous le pouvez dans Excel ... Comment ferais-je cela dans des pandas via ipython? Donc, description pour dire "Red Bull-225825" deviendraient "Red Bull" et une nouvelle colonne serait créée à gauche de la description appelée "XYZ" avec une valeur 225825 comme valeur. Avec des valeurs nulles étant nulle. xxx

 Description a besoin de fractionnement

merci


1 commentaires

Qu'est-ce que tu as essayé jusque-là? Avez-vous regardé dans df.apply ?


3 Réponses :


0
votes
import pandas as pd
d = {'Description': ['Red Bull-225825'], 'TotalQty': [61], 'TotalSales' : [90.89]}
df = pd.DataFrame(data=d)
df[['Description','XYZ']] = df['Description'].str.split('-',expand=True)
df = df[['XYZ', 'Description', 'TotalQty', 'TotalSales']]
df

1 commentaires

S'il n'y a pas de tiret (E.G. 'Red Bull' »), il ne fonctionnera pas, produisant ValueError: les colonnes doivent avoir la même longueur que la touche



0
votes

Voici ma prise:

import pandas as pd
from io import StringIO

TESTDATA = StringIO("""Description,TotalQty,TotalSales
ACME, 11, 1
Evil Corp, 10, 2
Google-Alphabet, 100, 0""")

df = pd.read_csv(TESTDATA, sep=",")

def splitfun(row):
    if '-' in row['Description']:
        val1, val2 = row['Description'].split('-')
        return pd.Series({'Description': val1, 'AfterDash': val2})
    else:
        return pd.Series({'Description': row['Description'], 'AfterDash': None})

df[['Description','AfterDash']]=df.apply(splitfun, axis=1)

print(df)

  Description  TotalQty  TotalSales AfterDash
0        ACME        11           1      None
1   Evil Corp        10           2      None
2      Google       100           0  Alphabet


1 commentaires

A dû jouer avec cela pour que cela fonctionne pour travailler car j'ai des problèmes important des panneaux $ dans cette colonne, j'ai également un problème avec des valeurs contenant "-" deux fois par cellule ... Cependant, je n'ai pas précisé cela dans mon Question originale.



0
votes
datadict = {'Desc': ['Sale', 'Red Bull-968313', 'Lotto', 'ABC-11123'],
            'Total Qty': [1,2,3,4],
            'Total Sale': [5,6,7,8]
            }

import pandas as pd
df = pd.DataFrame.from_dict(datadict)
print (df)
#              Desc  Total Qty  Total Sale
#0             Sale          1           5
#1  Red Bull-968313          2           6
#2            Lotto          3           7
#3        ABC-11123          4           8

df['Desc Number'] = df['Desc'].str.split('-')
df['Desc'] = [i[0] for i in df['Desc Number']]
df['Desc Number'] = [i[1] if len(i)>1 else None for i in df['Desc Number']]
df = df[['Desc Number', 'Desc', 'Total Qty', 'Total Sale']]
print (df)

#  Desc Number      Desc  Total Qty  Total Sale
#0        None      Sale          1           5
#1      968313  Red Bull          2           6
#2        None     Lotto          3           7
#3       11123       ABC          4           8
This answer will account for the None/Null values you require

0 commentaires