2017-07-05 3 views
1

整数と浮動小数点数の混在した列があると仮定して、その列をループしてすべての値が数値かどうかを確認する必要があります。数値ではない値は、そのセルのインデックスを空のリストにダンプします。列のすべての値に整数が含まれているかどうかを確認します。そのセルのインデックスは表示されません。

このようなコラム:

DESCRIPTION      RATE 
79th St & Private Dr - 5022 W  1.5 
79th St & Allison Ave    1.5 
Allison Ave & 81st St    1 
81st St & Norfolk St     1 
Norfolk St & Private Dr - 8178 N  1 
Norfolk St & 84th St     1 
Moller Rd & 86th St     1.5 
Zionsville Rd & 86th St    1.5 

私はこのようなコードを書いたが、newlistループが機能していません。

import pandas as pd 
import numpy as np 

df = pd.read_csv("C:\\Python34\\python scripts\\BNSF\\data\\data.csv") #read csv 
col=df.columns #read header 
print(col) 
r=df.shape[0] #gives number of row count 
c=df.shape[1] #gives number of col count 
print(r, c) 
typ=df.dtypes 
print(typ) 

newlist=[] #creates blank list 
for i in range(r,1): 
    if df.iloc[i,1].dtype == np.int64: 
     pass 
    else: 
     print(df.iloc[i,1]) 
     newlist.append(df.iloc[i,1]) 
     print(newlist) 

ループ内に変更が必要です。助けてください。

+0

'newlist'、行、列、または'(行、列)のタプルのようなインデックスはどのようにしたいですか?現在、インデックスではなくデータフレームの_values_が追加されていることに注意してください。いずれにしても、パンダではdtypeがカラムごとに決まるため、おそらくすべてのセルをトラバースする必要はありません。 – jdehesa

+0

あなたのデータからの新しいリストは何ですか? –

+0

newlist = [[行、列]、[行、列]] –

答えて

1

パンダの美しさは、しばしばループの使用を避けることができるということです。データを整数/非整数にソートするには、モジュロ1の演算を行い、ゼロ等価性%1==0をチェックして、変数intcheckにTrue/False値のDataFrameを生成します。次に元のDataFrameの整数であるTrue行を取得します。 ~を前面に置くと、論理値が反転し、非整数値が得られます。

import pandas as pd 

d =[["79th St & Private Dr - 5022 W"  ,1.5], 
    ["79th St & Allison Ave"    ,1.5], 
    ["Allison Ave & 81st St"    ,1 ], 
    ["81st St & Norfolk St"     ,1 ], 
    ["Norfolk St & Private Dr - 8178 N"  ,1 ], 
    ["Norfolk St & 84th St"     ,1 ], 
    ["Moller Rd & 86th St"     ,1.5], 
    ["Zionsville Rd & 86th St"    ,1.5]] 

df = pd.DataFrame(d, columns=['DESCRIPTION','RATE']) 
df = df.set_index('DESCRIPTION') 

intcheck = (df.RATE%1)==0 

print(df[intcheck]) 

#         RATE 
# DESCRIPTION       
# Allison Ave & 81st St    1.0 
# 81st St & Norfolk St    1.0 
# Norfolk St & Private Dr - 8178 N 1.0 
# Norfolk St & 84th St    1.0 

print(df[~intcheck]) 

#        RATE 
# DESCRIPTION       
# 79th St & Private Dr - 5022 W 1.5 
# 79th St & Allison Ave   1.5 
# Moller Rd & 86th St    1.5 
# Zionsville Rd & 86th St   1.5 
関連する問題