2017-09-19 10 views
0

dfという名前のデータフレームにcsvファイルをインポートしました。Python Pandasで、1つの列を取得し、次にいくつかの列をスキップして連続した列を取得する方法

df = pd.read_csv('csvfile.csv') 

は、DFは、名前を持つ8列を有し、A、B、C、D、E、F、G、Hは、次いで、Iは、列Bおよび列Eを取得する必要がある:H、およびこれらの全ての行列。 私は df1 = df.loc[:,"E":"H"]を使用してE列からH列を取得しましたが、コードでは"E":"H"を使用して列Bを取得する方法も分かりませんでした。私が"E":"H"を保持したい理由は、E、F、G、Hの列名が非常に長いため、4つの名前すべてを入力しないようにしました。ありがとうございました

+0

を使用します? – su79eu7k

+0

私は複数のcsvファイルを持っているので、df.ilocは使用しませんでした。いくつかのものは8つ、あるものは10つのものなどがあります。しかし、私が望むカラム名は常に同じで、カラム名EからHは常に一緒です。私は異なるCSVファイルのコードを書き換える必要がないようにdf.locを使用します。 – Zheng

+0

'df.loc [:、list( 'BEFGH')]'。列名が 'B'ではない場合は、すべての列名のリストを作成してインデックスを作成するだけです。 – Ian

答えて

1
df.loc[:, list(df.columns[1]) + list(df.columns[4:])] 

あなたは自動的に列を検索したい場合は、あなたが

column_list = list(df.columns) 
B_index = column_list.index('B') 
E_index = column_list.index('E') 
H_index = column_list.index('H') 
df.loc[:, list(df.columns[B_index]) + list(df.columns[E_index:H_index])] 

を使用することができますこれは4行ですが、コードは非常に読みやすいです。あなたは事前に、列の正確な名前を知っていれば

あるいは、それがリストにそれらの名前を格納するのに最適な場合があり、その後、あなたはすでに代わりに `loc`のiloc``てみました

column_names = [ 
    'B', 
    'E', 
    'F', 
    'G', 
    'H' 
] 
df.loc[:, column_names] 
+0

ありがとう、ジェレミー。列名を使用できる方法はありますか?私が言及したように、私は複数のcsvファイルを持っていて、それらは異なる数の列を持っています。しかし、私が望んでいたカラム名は常に同じで、EからHまでのカラム名は常に一緒です。 – Zheng

+0

これを行う方法を追加しました。うまくいけば助けてください!また、あらかじめカラム名を明記しておけば、コードが乱雑にならないように明示的に列名を書き留める方法も示しました。 –

関連する問題