Beyaz alanı Pandas DataFrame üstbilgilerinden nasıl çıkarabilirim?


96

Bazı sütun başlıklarında fazladan beyaz boşluk bulunan bir Excel dosyasındaki verileri ayrıştırıyorum.

Elde edilen veri çerçevesinin sütunlarını kontrol ettiğimde df.columns, şunu görüyorum:

Index(['Year', 'Month ', 'Value'])
                     ^
#                    Note the unwanted trailing space on 'Month '

Sonuç olarak şunları yapamam:

df["Month"]

Çünkü bana "Ay" değil, "Ay" istediğim gibi sütunun bulunmadığını söyleyecektir.

Öyleyse sorum, istenmeyen beyaz boşluğu sütun başlıklarından nasıl çıkarabilirim?

Yanıtlar:


142

renameYönteme fonksiyonlar verebilirsiniz . str.strip()Yöntem istediğini yapmalıdır.

In [5]: df
Out[5]: 
   Year  Month   Value
0     1       2      3

[1 rows x 3 columns]

In [6]: df.rename(columns=lambda x: x.strip())
Out[6]: 
   Year  Month  Value
0     1      2      3

[1 rows x 3 columns]

Not : Bunun bir DataFramenesne döndürdüğünü ve ekranda çıktı olarak gösterildiğini, ancak değişikliklerin aslında sütunlarınızda ayarlanmadığını unutmayın. Değişikliklerin gerçekleşmesi için şunu kullanın:

  1. [Docs]inplace=True bağımsız değişkenini kullanın
df.rename(columns=lambda x: x.strip(), inplace=True)
  1. dfDeğişkeninize geri atayın :
df = df.rename(columns=lambda x: x.strip())

64

.str.stripYeni bir sürümü kullanıyorsanız , artık yalnızca sütunlarda arama yapabilirsiniz :

In [5]:
df = pd.DataFrame(columns=['Year', 'Month ', 'Value'])
print(df.columns.tolist())
df.columns = df.columns.str.strip()
df.columns.tolist()

['Year', 'Month ', 'Value']
Out[5]:
['Year', 'Month', 'Value']

Zamanlamalar

In[26]:
df = pd.DataFrame(columns=[' year', ' month ', ' day', ' asdas ', ' asdas', 'as ', '  sa', ' asdas '])
df
Out[26]: 
Empty DataFrame
Columns: [ year,  month ,  day,  asdas ,  asdas, as ,   sa,  asdas ]


%timeit df.rename(columns=lambda x: x.strip())
%timeit df.columns.str.strip()
1000 loops, best of 3: 293 µs per loop
10000 loops, best of 3: 143 µs per loop

Yani str.strip~ 2 kat daha hızlı, bunun daha büyük dfs için daha iyi ölçeklenmesini bekliyorum


9

Excel'den dışa aktarmak ve Pandas DataFrame olarak okumak için CSV biçimini kullanıyorsanız, şunları belirtebilirsiniz:

skipinitialspace=True

Ararken pd.read_csv.

Gönderen belgeler :

skipinitialspace: bool, varsayılan False

Skip spaces after delimiter.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.