pandas read_clipboardを使用して、Stack Overflowの質問にデータを効果的に読み込むにはどうすればよいですか?

Dec 20 2020

Stack Overflowに関する多くのパンダの質問には、データを生成/再現するためのコードがなく、データの数行のみがテキストとして含まれていることに気付きました。read_clipboardヘッダー名に空白がある場合や、列にリストなどのPythonオブジェクトがある場合など、多くの状況でこの関数を効果的に呼び出してデータを読み取る方法の存在を認識していますが、理解できません。

pd.read_clipboardデフォルトの引数を使用して読みやすくならない、型にはまらない形式で貼り付けられたデータをより効果的に読み取るにはどうすればよいですか?read_clipboard不足する状況はありますか?

回答

4 cs95 Dec 20 2020 at 17:46

read_clipboard:ビギナーズガイド


read_clipboardpandasタグの質問に答え始めた人にとっては本当に救いの恵みです。残念ながら、パンダのベテランは、投稿されたデータの形式がさまざまに複雑であるため、質問で提供されたデータを端末に取り込むのが必ずしも簡単ではないことも知っています。

ありがたいことに、read_clipboardこれらのケースのほとんどを可能にする(そして簡単にする)引数があります。一般的な使用例とそれに対応する引数を次に示します。


一般的な使用例

read_clipboardread_csv空白区切り記号を使用して内部で使用するため、CSVからデータを解析するための多くの手法がここに適用されます。

  • データ内にスペースがある列の解析

    • sep正規表現引数とともに使用します。まず、列の間に少なくとも2つのスペースがあり、列のデータ自体の中に最大で1つの連続する空白があることを確認します。次に、これを使用できます。sep=r'\s{2,}'これは、「セパレーターに少なくとも2つの連続する空白を探して列を区切る」ことを意味します(注:engine='python'multicharまたはregexセパレーターには必須です)。

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

      pd.read_clipboardを使用するときに、スペースを含む列名をどのように処理するかも参照してください。。

  • DataFrameの代わりにシリーズを読む

    • を使用squeeze=trueするheader=Noneと、最初の行もデータである場合にも必要になる可能性があります。

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

      パンダread_clipboardを使用してシリーズを読む簡単な方法はありますか?も参照してください。。

  • カスタムヘッダー名を使用したデータの読み込み

    • およびとnames=[...]組み合わせて使用し、既存のヘッダーを無視します。header=Noneskiprows=[0]

       df = pd.read_clipboard(..., header=None, names=['a', 'b', 'c'], skiprows=[0])
      
  • ヘッダーなしでデータをロードする

    • 使用する header=None
  • 1つ以上の列をインデックスとして設定します

    • index_col=[...]適切なラベルまたはインデックスで使用する
  • 日付の解析

    • parse_dates適切な形式で使用してください。解析する場合datetimes(つまり、日付がタイムスタンプで区切られている列)、sep=r'\s{2,}'列が少なくとも2つのスペースで区切られていることを確認しながらも使用する必要があります。

ここでカバーされていない他のケースの議論に関するより包括的なリストについては、私によるこの回答を参照してくださいread_csv...


警告

read_clipboardスイスアーミーナイフです。しかし、それは

  • 可愛らしい/表形式のデータを読み取ることができません(IOW、境界線により困難になります)

    • pd.read_clipboardを使用してきれいに印刷/フォーマットされたデータフレームで読み取るを参照してください。これに取り組むための解決策のために。
  • インデックス内のすべての要素が指定されていない限り、MultIndexesを正しく解析できません。

    • pd.read_clipboardを使用したMultiIndexデータフレームのコピーを参照してください。これに取り組むための解決策のために。
  • データ内の省略記号を無視/処理することはできません

    • 私が提案する方法は、印刷する前に手動で省略記号を削除することです
  • リスト(または他のオブジェクト)の列を文字列以外のものとして解析することはできません。pd.read_clipboardを使用してリストを含むデータフレームをどのように読み取るかに示すように、列を個別に変換する必要があります。。

  • 画像からテキストを読み取ることはできません(したがって、データを他の人と共有する手段として画像を使用しないでください!)

2 etch_45 Dec 20 2020 at 18:23

この関数の1つの弱点はCTRL + C、コピーがPDFファイルから実行された場合の内容をキャプチャしないことです。この方法でテストすると、読み取りが空になります。

しかし、通常のテキストエディタを使用することで、問題なく動作します。ランダムに入力されたテキストを使用した例を次に示します。

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