[英]How to extract all non-nan values in this dataframe by the non-nan values count of each row
[英]Get the count of Text, Numeric/Float, Blank and Nan values for each column in a Dataframe and extract using a filter
假设下表
指数 | 列1 | 列2 | 列3 |
---|---|---|---|
0 | 10.5 | 2.5 | 楠 |
1个 | 秒 | ||
2个 | 2.9 | 3.2 | 一种 |
3个 | #VAL | 楠 | 2个 |
4个 | 3个 | 5.6 | 4个 |
现在我想要得到的是一个摘要 dataframe 它将给我上面提到的不同数据类型/条件的计数
指数 | 列1 | 列2 | 列3 |
---|---|---|---|
整数/浮点数 | 3个 | 3个 | 2个 |
空白的 | 1个 | 0 | 1个 |
楠 | 0 | 1个 | 1个 |
文本 | 1个 | 1个 | 1个 |
我来自 Excel 所以在 Excel 条件下它会非常简单
Integer/Float 公式:我会使用 ISNUMBER 并创建一个 True 和 False 值的数组并对真实值求和
空白:我会简单地使用 COUNTIF(Column, "")
文本:与 ISNUMBER 类似,我会使用上面的 ISTEXT。
我试过在 Stack Overflow 上搜索这个但是我得到的最好的是
pd.DataFrame(df["Col1"].apply(type).value_counts())
然而,这并没有给我确切的 output。
我还想检查是否可以根据上述条件过滤掉值并获得合适的单元格。 例如 df[Col1==ISTEXT]
使用自定义函数分别计算每种类型:
def f(x):
a = pd.to_numeric(x, errors='coerce').notna().sum()
b = x.eq('').sum()
c = x.isna().sum()
d = len(x) - (a + b + c)
return pd.Series([a,b,c,d], ['Integer/Float','Blank','Nan','Text'])
df = df.apply(f)
print (df)
Col1 Col2 Col3
Integer/Float 3 3 2
Blank 1 0 1
Nan 0 1 1
Text 1 1 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.