gpt4 book ai didi

Python Pandas 找到非零索引

转载 作者:太空宇宙 更新时间:2023-11-04 09:09:42 27 4
gpt4 key购买 nike

您好,我正在尝试使用 pandas 来整理 DataFrame。它是从电子表格导入的,有一些空行和空列。

我以为我可以用

df.apply(numpy.nonzero(),axis=1)df.apply(numpy.nonzero(),axis=0) 获取索引的非零列,以便我可以从 DataFrame 中删除逆向。这给了我一个元组列表,我不清楚如何获取。

numpy.nonzero(df) 生成所有非零值的数组,但我不确定如何将该值输入 all() 函数.

我的问题是,从 DataFrame 中删除那些全部为空(或全部具有 N/A 等值)的索引行和列的最佳和最快方法是什么

谢谢

添加源电子表格的编辑示例

<bound method DataFrame.head of             0         1         2  3         4         5  6         7         8  9   \
0
1 some title
2 date 38477
3
4
5 cat1 cat2 cat3
6 a b c d e f
7
8 Z 167.9404 151.1389 346.197 434.3589 336.7873 80.52901
9 X 220.683 56.0029 73.73679 428.8939 483.7445 251.1877
10 C 433.0189 390.1931 251.6636 418.6703 12.21859 113.093
11
12 V 226.0135 418.1141 310.2038 153.9018 425.7491 73.08073
13 W 295.146 173.2747 2.187459 401.6453 51.47293 175.387
14 S 306.9325 157.2772 464.1394 216.248 478.3903 173.948
15 A 19.86611 73.11554 320.078 199.7598 467.8272 234.0331
16
17 F 225.511 20.97305 425.8834 190.1625 123.9103 116.3803
18 R 130.4728 96.08118 428.2007 22.46184 26.34678 359.5625
19 E 239.1516 439.7733 197.7023 121.6911 195.0169 264.5553
20 W 227.1557 471.8341 165.3779 151.7552 314.7827 367.0868

这是我目前正在使用的 def,但感觉很笨重

def nulls(x):
''' the NULS section to clear all nulls from the
DataFrame'''
# Empty Rows
nr = [i for i in x.index if all(str(k) in '' for k in x.ix[i])]
# Non Empty Rows
r = [i for i in x.index if i not in nr]
# Empty columns
nc = [j for j in range(x.shape[1]) if all(str(k) in '' for k in x[j])]
# Non Empty Columns
c = [j for j in range(x.shape[1]) if j not in nc]
# Subset the non-empties
x=x.ix[r,c]
x=x.reindex()
return(x)

最佳答案

dropna(how='all') 是您正在寻找的(通常),但您需要以将空单元格视为 NaN 的方式加载数据框 而不是空字符串。也就是说,您在这里有几个选择。

如果您确定要删除的所有内容都是文字空字符串 ('', None, np.NaN,或者 0) and 你不想保留 0,那么你可以只填充 NaN 和转换为 bool 值并检查总和是否为 0。您可以根据要删除的方式进行调整。

indexer = df.fillna(False).astype(bool)
drop_columns = indexer.sum(0) == 0
keep_rows = indexer.sum(1) != 0

new_df = df.drop(df.columns[drop_columns], axis=1)[keep_rows]

但是,如果您需要检查空格,或者想要排除文字零,那么您应该将 applymap 与函数一起使用(主要基于 this StackOverflow answer on dropping None/empty/whitespace columns ),然后执行相同的操作如上。

def is_blank(x):
return x is None or pd.isnull(x) or bool(str(x).strip())

indexer = df.applymap(is_blank)

但就个人而言,我建议您在加载数据集时将 '' 添加到 na_values


fillna()astype()的简单解释

fillna()让您用其他值“填充”NA 值。在这里,我们填充 False(因为 bool(float('nan')) 的计算结果为 True),但您可以填充任何值或使用各种不同的方法。 astype 将数组从一种类型转换为另一种类型。所以放置 astype(bool) 意味着它将整个数组转换为 TrueFalse (相当于 10),然后您可以求和以找到行或列中 True 值的数量。

关于Python Pandas 找到非零索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16755731/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com