2017-02-20 54 views
0

我有一個很大的數據框熊貓,我試圖獲得皮爾遜係數。一些colums有時包含字符串,我想刪除包含字符串的數據框的所有列。 我現在的代碼不會產生任何錯誤,但不起作用。刪除在數據框中包含字符串的每一列

def StringNoMore(dataframe): 
    i=len(dataframe.index)-1 
    print(i) 
    while i > 0: 
     for cell in dataframe.iloc[i]: 
      dataframe=dataframe.loc[:, (dataframe != str).any(axis=0)] 
     print(i) 
     i-=1 
    print("dataframe no string") 
    return dataframe 
+0

由於任何數據幀不是字符串,因此'dataframe!= str'總是'Tru'。 – DyZ

回答

2

做事情的一種方法是嘗試將列轉換爲某種數字類型,例如, floatint。如果你不能在列數字轉換的每個值,那麼你知道它包含str

import pandas as pd 

df = pd.DataFrame({'A': [1, 'abc', 'def', 3], 'B': [2, 2, 1, 4], 'C': ['a', 'a', 'b', 3]}) 

cols_to_remove = [] 

for col in df.columns: 
    try: 
     _ = df[col].astype(float) 
    except ValueError: 
     print('Couldn\'t covert %s to float' % col) 
     cols_to_remove.append(col) 
     pass 

# keep only the columns in df that do not contain string 
df = df[[col for col in df.columns if col not in cols_to_remove]] 

結果:

>>> df 
    B 
0 2 
1 2 
2 1 
3 4 
+0

謝謝它工作正常,速度非常快 –

+0

對於*非常大的df,您應該使'cols_to_remove'成爲一個集合,而不是一個列表。 – BallpointBen

1

如果你的數據幀只有數字,布爾和字符串,則代碼如下:

df = df[df.T[df.dtypes!=np.object].index] 
+0

我想我把我的整個數據框放在某個位置,以避免編碼問題,@ not_a_robot解決方案快速工作,所以我要堅持下去,thx的答案 –

相關問題