Pandalar read_clipboard kullanarak Stack Overflow sorularına nasıl etkili bir şekilde veri yükleyebilirim?

Dec 20 2020

Stack Overflow'daki pek çok panda sorusunun, verilerinin yalnızca birkaç satırını metin olarak içerdiğini ve onu üretmek / yeniden üretmek için eşlik eden kod olmadan, metin olarak içerdiğini fark ettim. read_clipboardBaşlık adlarında beyaz boşluklar veya sütunlardaki listeler gibi Python nesneleri gibi birçok durumda verileri okumak için bu işlevi etkin bir şekilde nasıl çağıracağımı bilemiyorum , ancak çözemiyorum.

pd.read_clipboardGeleneksel olmayan biçimlerde yapıştırılan verileri, varsayılan bağımsız değişkenleri kullanarak kolay okumaya izin vermeyen verileri okumak için nasıl daha etkili bir şekilde kullanabilirim ? read_clipboardKısa gelen durumlar var mı?

Yanıtlar

4 cs95 Dec 20 2020 at 17:46

read_clipboard: Yeni başlayanların rehberi


read_clipboardpandalar etiketiyle soruları yanıtlamaya başlayan herkes için gerçekten kurtarıcı bir lütuftur . Maalesef, pandaların gazileri, sorularda verilen verilerin, gönderilen verilerin formatındaki çeşitli komplikasyonlar nedeniyle bir terminale girmenin her zaman kolay olmadığını da biliyorlar.

Neyse ki, read_clipboardbu durumların çoğunu mümkün (ve kolay) yapan argümanlar var. İşte bazı yaygın kullanım durumları ve bunlara karşılık gelen argümanlar.


Yaygın Kullanım Durumları

read_clipboardkullanımları read_csvCSV veri ayrıştırma teknikleri bir çok gibi, burada da geçerlidir, böylece boşluk ayırıcı ile kaputun altında,

  • verilerdeki boşluklarla sütunları ayrıştırma

    • sepnormal ifade bağımsız değişkeniyle birlikte kullanın . İlk olarak, sütunlar arasında en az iki boşluk ve sütunun verilerinin içinde en fazla bir ardışık boşluk olduğundan emin olun. Daha sonra sep=r'\s{2,}', "ayırıcı için art arda en az iki beyaz boşluk arayarak sütunları ayır" anlamına gelen "(not: engine='python'çok noktalı veya normal ifade ayırıcılar için gereklidir) anlamını kullanabilirsiniz :

       df = pd.read_clipboard(..., sep=r'\s{2,}', engine='python')
      

      Ayrıca pd.read_clipboard'u kullanırken içinde boşluk olan sütun adlarını nasıl işlersiniz? .

  • DataFrame yerine bir dizi okumak

    • Kullanım squeeze=true, büyük olasılıkla da gerekir header=Noneilk satır da veri ise.

       s = pd.read_clipboard(..., header=None, squeeze=True)
      

      Ayrıca bkz. Bir Seriyi okumak için panda read_clipboard'u kullanmanın daha kolay bir yolu olabilir mi? .

  • özel başlık adlarıyla veri yükleme

    • mevcut başlıkları yok saymak names=[...]için header=Noneve birlikte kullanın skiprows=[0].

       df = pd.read_clipboard(..., header=None, names=['a', 'b', 'c'], skiprows=[0])
      
  • başlık olmadan veri yükleme

    • kullanım header=None
  • dizin olarak bir veya daha fazla sütun ayarlayın

    • index_col=[...]uygun etiket veya indeks ile kullanın
  • ayrıştırma tarihleri

    • parse_datesuygun formatta kullanın . Ayrıştırıyorsanız datetimes(yani, tarih damgasıyla ayrılmış sütunlar), sep=r'\s{2,}'sütunlarınızın en az iki boşlukla ayrıldığından emin olurken de kullanmanız gerekecektir .

Burada ele alınmayan diğer durumlara ilişkin argümanlar hakkında daha kapsamlı bir liste için bu cevaba bakın read_csv...


Uyarılar

read_clipboardİsviçre çakısıdır. Ancak

  • güzel tablo / tablo biçimlerindeki verileri okuyamaz (IOW, sınırlar işi zorlaştırır)

    • Bkz oldukça baskılı / biçimlendirilmiş dataframe kullanarak pd.read_clipboard okuma konusunu? bunun üstesinden gelmek için çözümler için.
  • Dizindeki tüm öğeler belirtilmediği sürece MultIndexes doğru şekilde ayrıştırılamaz.

    • MultiIndex veri çerçevelerini pd.read_clipboard ile kopyalama konusuna bakın. bunun üstesinden gelmek için çözümler için.
  • verilerdeki elipsleri görmezden gelemez / işleyemez

    • önerdiğim yöntem, yazdırmadan önce elipsleri manuel olarak kaldırmaktır
  • listelerin sütunlarını (veya diğer nesneleri) dizeden başka bir şey olarak ayrıştıramaz. Pd.read_clipboard kullanarak listeleri olan bir veri çerçevesinde nasıl okursunuz? Bölümünde gösterildiği gibi sütunların ayrı olarak dönüştürülmesi gerekecektir. .

  • resimlerden metin okuyamaz (bu nedenle lütfen verilerinizi başkalarıyla paylaşmak için resimleri kullanmayın, lütfen!)

2 etch_45 Dec 20 2020 at 18:23

Bu işlevin bir zayıf yönü CTRL + C, kopyalama işleminin bir PDFdosyadan gerçekleştirilip gerçekleştirilmediğinin içeriğini yakalayamamasıdır . Bu şekilde test etmek boş bir okumayla sonuçlanır.

Ancak normal bir metin editörü kullanarak, gayet iyi gidiyor. Rastgele yazılmış metin kullanan bir örnek:

>>> pd.read_clipboard()
Empty DataFrame
Columns: [sfsesfsdsxcvfsdf]
Index: []