2017-03-23 1 views
0

Je suis en train de lire un fichier Excel dans un DataFrame. J'ai besoin de supprimer les espaces de toutes les cellules, laissant les autres cellules inchangées dans Python 3.5. par exemple:Comment supprimer les espaces blancs de Python DataFrame dans cet exemple

from pandas import Series, DataFrame 
import pandas as pd 
import numpy as np 

#read data from DataFrame 
data_ThisYear_Period=[[' 序 号','北 京','上 海',' 广州'],\ 
         [' 总计','11232',' 2334','3 4'],\ 
         [' 温度','1223','23 23','2323'],\ 
         ['人 口','1232','21 321','1222'],\ 
         ['自行车', '1232', '21321', '12 22']] 
data_LastYear_Period=DataFrame(data_ThisYear_Period) 
print(type(data_LastYear_Period)) 

data_ThisYear_Period.apply(data_ThisYear_Period.str.strip(),axis=1) 

retraçage (appel le plus récent en dernier): fichier "C: /test/temp.py", ligne 17, à data_ThisYear_Period.apply (data_ThisYear_Period.str.strip() , axe = 1) AttributeError: objet 'liste' n'a pas d'attribut 'appliquer'

Comment bande de Python dataframe espaces blancs dans cet exemple

Répondre

1

utilisation applymap au dataframe, applymap applique à la Fonction mbda sur chaque cellule. Dans la fonction lambda, divisez la chaîne (les espaces blancs sont ignorés), puis joignez-la. S'il y a un int, alors vous pouvez utiliser sinon else dans la fonction lambda.

from pandas import Series, DataFrame 
import pandas as pd 
import numpy as np 

#read data from DataFrame 
data_ThisYear_Period=[[' 序 号','北 京','上 海',' 广州'],\ 
         [' 总计','11232',' 2334','3 4'],\ 
         [' 温度','1223','23 23','2323'],\ 
         ['人 口',1232,'21 321','1222'],\ 
         ['自行车', '1232', '21321', '12 22']] 

data_LastYear_Period=DataFrame(data_ThisYear_Period) 
print data_LastYear_Period 
data_LastYear_Period = data_LastYear_Period.applymap((lambda x: "".join(x.split()) if type(x) is str else x)) 

print data_LastYear_Period 

résultats dans

 0  1  2  3 
0 序 号 北 京 上 海  广州 
1 总计 11232 2334  3 4 
2 温度 1223 23 23 2323 
3 人 口 1232 21 321 1222 
4 自行车 1232 21321 12 22 

    0  1  2  3 
0 序号  北京  上海 广州 
1 总计 11232 2334 34 
2 温度 1223 2323 2323 
3 人口 1232 21321 1222 
4 自行车 1232 21321 1222 

sur une note de côté, vous obtiennent cette erreur particulière parce que

data_ThisYear_Period.apply(data_ThisYear_Period.str.strip(),axis=1) 

data_ThisYear_Period est une liste et non pas une trame de données de pandas géants (data_LastYear_Period)

+0

Merci beaucoup! dans cet exemple, cela fonctionne. mais quand je lis DataFrame d'excel, il dispear: AttributeError: ("int" l'objet n'a aucun attribut 'split' ", 's'est produit à l'index 序号'), Comment puis-je le résoudre? Je vous remercie ! – chenhong

+0

S'il existe un int, vous pouvez utiliser sinon else dans la fonction lambda. voir l'édition. – plasmon360

+0

merci! Ça marche! – chenhong