questions および answers では、ユーザーが質問/回答が機能する例DataFrame
を投稿することがよくあります。
In []: x
Out[]:
bar foo
0 4 1
1 5 2
2 6 3
このDataFrame
を私のPythonインタープリターに取り込むことができるようにすると、質問のデバッグや回答のテストを開始できるので、本当に役に立ちます。
これどうやってするの?
パンダは、人々が何をしたいかを本当に知っている人々によって書かれています。
バージョン0.13
以降の関数があります pd.read_clipboard
これは、これを「正しく動作させる」のに非常に効果的です。
質問のコードのbar foo
で始まる部分(つまりDataFrame)をコピーして貼り付け、これをPythonインタープリターで実行します。
In [53]: import pandas as pd
In [54]: df = pd.read_clipboard()
In [55]: df
Out[55]:
bar foo
0 4 1
1 5 2
2 6 3
In
またはOut
を含めないでください。そうしないと機能しません。engine='python'
を追加する必要があります(GitHubの この問題 を参照)。インデックスに名前を付けると、「c」エンジンは現在壊れています。これを試して:
0 1 2
level1 level2
foo a 0.518444 0.239354 0.364764
b 0.377863 0.912586 0.760612
bar a 0.086825 0.118280 0.592211
これはまったく機能しません、またはこれ:
0 1 2
foo a 0.859630 0.399901 0.052504
b 0.231838 0.863228 0.017451
bar a 0.422231 0.307960 0.801993
これは機能しますが、完全に正しくないものを返します!
pd.read_clipboard()
は気の利いたものです。ただし、スクリプトまたはノートブックでコードを記述している場合(および将来的にコードを機能させたい場合)は、あまり適していません。以下は、データフレームの出力を新しいデータフレームオブジェクトにコピー/貼り付けして、df
がクリップボードのコンテンツよりも長く存続するようにする別の方法です。
# py3 only, see below for py2
import pandas as pd
from io import StringIO
d = '''0 1 2 3 4
A Y N N Y
B N Y N N
C N N N N
D Y Y N Y
E N Y Y Y
F Y Y N Y
G Y N N Y'''
df = pd.read_csv(StringIO(d), sep='\s+')
いくつかのメモ:
StringIO
は、read_csv
に必要なファイルのようなオブジェクトに出力をラップします。sep
を\s+
に設定すると、空白の連続する各ブロックが単一の区切り文字として扱われるようになります。上記の答えはPython 3のみです。Python 2で行き詰まっている場合は、インポート行を置き換えてください。
from io import StringIO
代わりに:
from StringIO import StringIO
古いバージョンのpandas
(v0.24
以前)を使用している場合は、上記のコードのPy2/Py3互換バージョンを簡単に作成できます。
import pandas as pd
d = ...
df = pd.read_csv(pd.compat.StringIO(d), sep='\s+')
pandas
の最新バージョンは、Python 2のサポートとともにcompat
モジュールを削除しました。
次のような標準のエントリがあるCSVファイルからコピーして貼り付ける場合:
2016,10,M,0600,0610,13,1020,24
2016,3,F,0300,0330,21,6312,1
2015,4,M,0800,0830,8,7112,30
2015,10,M,0800,0810,19,0125,1
2016,8,M,1500,1510,21,0910,2
2015,10,F,0800,0810,3,8413,5
df =pd.read_clipboard(sep=",", header=None)
df.rename(columns={0: "Name0", 1: "Name1",2:"Name2",3:"Name3",4:"Name4",5:"Name5",6:"Name6",7:"Name7",8:"Name8"})
適切に定義されたpandas Dataframe。