Soru Read_csv daha esnek wrt boşlukta ayırıcı nasıl oluşturulur?


Bir dosyada saklanan verileri kullanarak bir veri çerçevesi oluşturmam gerekiyor. Bunun için kullanmak istiyorum read_csv yöntem. Ancak, ayırıcı çok düzenli değil. Bazı sütunlar sekmelerle ayrılır (\t), diğerleri boşluklarla ayrılır. Ayrıca, bazı sütunlar 2 veya 3 veya daha fazla boşlukla veya hatta boşluk ve sekmelerle (örneğin 3 boşluk, iki sekme ve sonra 1 boşluk) bir arada ayrılabilir.

Pandaların bu dosyaları düzgün bir şekilde işlemesi için bir yol var mı?

Bu arada, Python kullanırsam bu problemim yok. Kullanırım:

for line in file(file_name):
   fld = line.split()

Ve mükemmel çalışıyor. Alanlar arasında 2 veya 3 boşluk olup olmadığı umurumda değil. Boşluk ve sekme kombinasyonları bile sorun yaratmaz. Pandalar aynı şeyi yapabilir mi?


37
2018-02-22 14:43


Menşei




Cevaplar:


İtibaren belgeleme, bir regex kullanabilir veya delim_whitespace:

>>> import pandas as pd
>>> for line in open("whitespace.csv"):
...     print repr(line)
...     
'a\t  b\tc 1 2\n'
'd\t  e\tf 3 4\n'
>>> pd.read_csv("whitespace.csv", header=None, delimiter=r"\s+")
   0  1  2  3  4
0  a  b  c  1  2
1  d  e  f  3  4
>>> pd.read_csv("whitespace.csv", header=None, delim_whitespace=True)
   0  1  2  3  4
0  a  b  c  1  2
1  d  e  f  3  4

62
2018-02-22 14:51



Ayrıca kullanabilirsiniz skipinitialspace ilk alanı atlamak için - jarondl


>>> pd.read_csv("whitespace.csv", header = None, sep = "\s+|\t+|\s+\t+|\t+\s+")

ayırıcı olarak herhangi bir sayıdaki boşluk ve sekme kombinasyonunu kullanır.


5
2017-12-25 11:32





Tüm kombinasyon ve sıfır veya daha fazla olayın icabına bakmak için bunu düşünebiliriz.

pd.read_csv("whitespace.csv", header = None, sep = "[ \t]*,[ \t]*")

0
2017-10-27 04:26





Pandaların iki adet csv okuyucusu vardır, sadece gereksiz beyaz alanla ilgili esneklik gösterir:

pd.read_csv("whitespace.csv", skipinitialspace=True)

biri olmasa da

pd.DataFrame.from_csv("whitespace.csv")

Beyaz boşluğun izini sürmek için esnek olmayan kutucuklar vardır, cevapları normal ifadelerle birlikte görürsünüz. Delim_whitespace'ten kaçının, aynı zamanda ayırıcı olarak sadece boşluklara (veya olmadan) izin verdiği için.


0
2017-11-04 14:37