2016-05-12 10 views
2

こんにちは列の値に基づいてすべての行を選択する必要があります。新しい変数に格納するか、新しいデータフレームを作成し、ヘッダーなしのcsvに保存します。列の値に基づいてすべての行を選択するpandas

import pandas as pd 
import numpy as np 

print(df) 
#  0  1 2 3 
# 0 Gm# one 0 0 
# 1 922 one 1 2 
# 2 933 two 2 4 
# 3 952 three 3 6 
# 4 Gm# two 4 8 
# 5 960 two 5 10 
# 6 963 one 6 12 
# 7 999 three 7 14 

したがって、最初の列の条件に基づいて新しいデータフレームを作成します。私は範囲>= 900 & <=999の行をつかみたい。望ましい出力:

インデックスなしのcsvに保存します。私は多分だけではなく、確認穴データフレームを参照することによってそれを行うための簡単な方法があり、私はintegers..orに穴列を変換する方法を見つけ出すことはできません取得しています問題:

print (df2) 
    922 one 1 2 
    933 two 2 4 
    952 three 3 6 
    960 two 5 10 
    963 one 6 12 
    999 three 7 14 

は、私はこれを試してみましたスタックオーバーフローやYouTubeの動画に関するさまざまな記事には載っていますが、それを正しく理解することはできません。私は喜んでそれを感謝する任意のアイデア。

#df[x]= data[x][(data[x]['0'].astype(np.int64))] need to find a away to convert the column [0] into integer for it evaluate 
#df2 = data[i]([(data['0'] >= 900) & (data['0'] <= 999)]) 

答えて

1

あなたはilocによって位置によって選択されたto_numeric最初の列を変換して、数値ではない値がNaNに変換されるため、条件(data['0'].notnull())を追加することができます。ヘッダを除去するためindexheader=Noneを除去するためのパラメータindex=Falseでの最終使用to_csv:コメントによって

import pandas as pd 

data = pd.DataFrame(
{'1': {0: 'one', 1: 'one', 2: 'two', 3: 'three', 4: 'two', 5: 'two', 6: 'one', 7: 'three'}, 
'0': {0: 'Gm', 1: '922', 2: '933', 3: '952', 4: 'Gm', 5: '960', 6: '963', 7: '999'}, 
'3': {0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14}, 
'2': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7}}) 

print data 

    0  1 2 3 
0 Gm one 0 0 
1 922 one 1 2 
2 933 two 2 4 
3 952 three 3 6 
4 Gm two 4 8 
5 960 two 5 10 
6 963 one 6 12 
7 999 three 7 14 
data.iloc[:, 0] = pd.to_numeric(data.iloc[:, 0], errors='coerce') 
print data 
     0  1 2 3 
0 NaN one 0 0 
1 922.0 one 1 2 
2 933.0 two 2 4 
3 952.0 three 3 6 
4 NaN two 4 8 
5 960.0 two 5 10 
6 963.0 one 6 12 
7 999.0 three 7 14 


df1 = data[(data['0'] >= 900) & (data['0'] <= 999) & (data['0'].notnull())] 
print df1 
     0  1 2 3 
1 922.0 one 1 2 
2 933.0 two 2 4 
3 952.0 three 3 6 
5 960.0 two 5 10 
6 963.0 one 6 12 
7 999.0 three 7 14 


df1.to_csv('file', index=False, header=None) 

EDIT:

あなたが試すことができます。

for i in range(0, len(tables)): 
    df = tables[i] 
    df.replace(regex=True,inplace=True,to_replace='½',value='.5') 
    df.iloc[:, 0] = pd.to_numeric(df.iloc[:, 0], errors='coerce') 
    df1 = df[(df.iloc[:, 0] >= 900) & (df['0'] <= 999) & (df['0'].notnull())] 
    print (df1) 
+0

ちょっと私はこれを取得していますがエラー私はちょうどあなたが私に与えたものを変更し、このエラーを取得します。 テーブル[i] .iloc [:, 0] =テーブル[i] .to_numeric(テーブル[i] .iloc [:, 0]、errors = 'coerce') ファイル "C:\ Python35 \ lib \ site (self、name) AttributeError: 'DataFrame'オブジェクトに 'to_numeric'属性がありません – herrington

+0

しかし、私は 'tables [i]]を使用しません。 '、しかし' tables' – jezrael

+0

私の解決策を確認してください、私はDataFrameのテストを追加します。 – jezrael

関連する問題