删除包含dataframe中字符串的每个列

时间:2017-02-20 02:06:45

标签: python pandas

我有一个大的数据帧熊猫,我试图获得皮尔森系数。有些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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果您的数据框只有数字,布尔值和字符串,则以下代码有效:

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