我有一个大的数据帧熊猫,我试图获得皮尔森系数。有些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 :(得分:2)
一种方法是尝试将列转换为某种数字类型,例如: float
或int
。如果您无法将列中的每个值转换为数字,那么您知道它包含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]